第一章节 matplotlib绘图
注意:若在plt中出现中文乱码或者负号乱码,要写入语句 plt.rcParams['font.sans-serif'] = ['SimHei'] ——解决中文乱码,plt.rcParams['axes.unicode_minus'] = False ——解决负号乱码
-
使用matplotlib绘图
-
基本思路:导入模块numpy、matplotlib.pyplot——定义X、Y轴(Y轴可能有多个)——matplotlib输入标题——plt.plot(X轴,Y轴)....绘制图形——plt.show()展示图形(缺点:每次都要写这行才能运行, 可使用%matplotlib inline 简化,只运行一遍,整个jupyter有效)
import numpy as np import matplotlib.pyplot as plt X = np.linspace(0,2*np.pi,100)——np.pi 就是圆周率那个π Y = sin(X) Y1 = cos(X) plt.title ('图表标题') plt.plot(X,Y) —— 将X,Y值绘制图形 plt.plot(X,Y1) plt.show() ——一定要告知计算机 已经完成输入,可以显示图形了.....
-
-
将图形区域划分(比如一个图,画成两部分)
-
思路:同样的定义X/Y轴,但在绘图时,要指定区域后绘图
X = np.linspace(0,2*np.pi,100) Y = np.sin(X) Y1 = np.cos(X) plt.title ('图表标题') plt.subplot(2,1,1)/plt.subplot(211)——可以理解为把原来1行,1列的区域划分为2行1列,选取上面那1行 plt.plot(X,Y) plt.subplot(212)/plt.subplot(2,1,2)——可以理解为把原来1行,1列的区域划分为2行1列,选取下面那1行 plt.plot(X,Y1)
-
基本图形类
-
柱状图绘制
- 基本思路: 定义X/Y轴——绘图
- 普通柱状图: 定义X/Y轴之后 —— plt.bar(x,y)
-
水平柱状图(当类别太多时)
- 定义x、y轴后——plt.barh(x,y)
-
不同分类不同组之间的柱状图
data = [[5,25,50,20],[4,23,51,12],[6,22,52,19]] X = np.arange(4) plt.bar(X+0.00,data[0],color ='b',width = 0.25,label ='A') plt.bar(X+0.25,data[1],color ='y',width = 0.25,label ='B') plt.bar(X+0.5,data[2],color ='r',width = 0.25,label ='C') plt.legend()
* **叠加性柱状图**
* 同上一操作相似,只是变y轴的buttom
```
data = [[5,25,50,20],[4,23,51,12],[6,22,52,19]]
X = np.arange(4)
plt.bar(X,data[0],color ='b')
plt.bar(X,data[1],color ='y',buttom = data[0])
plt.bar(X,data[2],color ='r',buttom = np.array(data[0]) + np.array(data[1]))——因为data是array不能相加,转化之后再相加
-
散点图——衡量两个变量之间的相关性
-
普通散点图
- 定义x、y轴——plt.scatter(X,Y)绘制就行了
-
普通散点图
-
有属性的散点图
-
颜色区分
- 定义x,y轴
- 设置属性 color = np.random.randn(N)# 颜色随机显示
area = np.pi(15np.random.rand(N)) #按照数值大小每个点面积不同,乘以15是因为随机数太小 - 绘制图形 plt.scatter( x,y, c = color, s = area, alpha =0.5) #alpha为透明度
-
颜色区分
-
划分属性(只有两个颜色)
同上述思路一致,仅仅在定义属性时将多个颜色改为2个颜色
定义 x,y轴——定义属性,area不变, color = np.random.randint(0,2,size=50**) #size表示数值大小,既可以用数字表示n个数,也可以用[A,B]表示A行,B列数据——plt.scatter( x,y, c = color, s = area, alpha =0.5)
-
直方图
- 思路:注意,和其他图形绘制不一致,直方图是将一个连续范围内的值分为多少份,再计算每一份包含的数量,因此需要定义范围,然后定义划分份数
-
普通直方图:
- 定义X 范围 如 X = np.random.rand(100)——划分分数 plt.hist(X,bins =20)——限定y轴范围 plt.ylim(0,15)
-
标准正态分布
- 同样的操作,只是范围设大一点x = np.random.randn(10000) ——plt.hist(x, bins =50)
- 箱型图绘制
-
思路:1 定义极小值和极大值的范围,以及多少行,多少列(多少个箱子)x=np.random.randint(20,120,size(10,5))#最小值20,最大值120,10行5列——2 plt.boxplot(x) ——3.限定y轴范围: plt.ylim(0,120)
- 若需要添加标签 plt.xticks([1,2,3],['A','B','C'])
-
绘制箱型图中位数所在的中位线
- plt.hlines(y = np.median(x,axis =0)[0],xmin=0,xmax=3)
-
思路:1 定义极小值和极大值的范围,以及多少行,多少列(多少个箱子)x=np.random.randint(20,120,size(10,5))#最小值20,最大值120,10行5列——2 plt.boxplot(x) ——3.限定y轴范围: plt.ylim(0,120)
注释类
-
在图形上添加文字
- 单个文字注释:plt.text (X轴坐标轴,y轴坐标轴,添加的文字,.....其他信息)
-
多个文字注释(成组的柱状图数据标签):定义后for循环
W = [0.0,0.25,0.5] for i in range(3):**——第几个数对应第几个偏移量 for a,b in zip(x+W[i],data[i]):**——x的偏移量对应 data的第几组值 plt.text(a,b,**'%.0f'%b,ha = 'center'**,va='bottom') #分别为保留0位小数和居中对齐,bottom表示留底,文字展示形式
-
利用annotate添加文字注释(更复杂一点,但效果更好)
- plt.annotate('Points',xy=(1,np.sin(1)),xytext=(2,0.5),fontsize=16,arrowprops =dict(arrowstyle="->")) ——参数分别为,要写的文本,xy轴的位置,文本xy的位置,文本大小,文本连接方式(箭头等)
-
绘制子图
思路:先把画板划分为几部分,再往几部分里面加内容
plt.subplots(划分成几行,划分成几列.......其他属性)
-
改变画布大小: pylab.rcParams['figure.figsize'] =(20,12)——将画布大小改为长20,宽12
%pylab inline
pylab.rcParams['figure.figsize'] =(20,12) #设置每个画板20 * 12大小n_bins =10 x = np.random.randn(1000,3) fig,axes = plt.subplots(nrows=2,ncols=2) **#将画板分为2行,2列** ax0,ax1,ax2,ax3 = axes.flatten() **#用4个变量接收4个范围** colors =['red','yellow','blue'] ax0.hist(x,n_bins,normed = 1,histtype ='bar',color=colors,label=colors) ax0.legend(prop={'size':10}) ax0.set_title('bar with legend') ax1.hist(x,n_bins,normed = 1,histtype = 'bar',stacked=True) ax1.set_title('stacked,bar') ax2.hist(x,n_bins, histtype = 'step',stacked = True, fill = False ) ax2.set_title('stack step(unfilled)') x = [np.random.randn(n) for n in [1000,5000,2000]] ax3.hist(x,n_bins,histtype='bar')
-
pandas直接绘图
- 思路:利用DateFrame造数据,然后绘图
- 散点图
- df = pd.DataFrame(np.random.rand(50,2),columns =['a','b']) #造50行,2列0-1之间随机数据,两列分别作为x,y轴
df.plot.scatter('a','b')
- df = pd.DataFrame(np.random.rand(50,2),columns =['a','b']) #造50行,2列0-1之间随机数据,两列分别作为x,y轴
- 柱状图
- df = pd.DataFrame(np.random.rand(10,4),columns =['A','B','C','D'])
df.plot.bar() #普通柱状图,没有其他参数/ df.plot.barh()#水平柱状图,横着显示 /df.plot.bar(stacked=True) #堆叠柱状图
- df = pd.DataFrame(np.random.rand(10,4),columns =['A','B','C','D'])
-
直方图
- df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':np.random.randn(1000)-1},columns=['a','b','c']) #元素比较复杂时,用多元字典来造
df.plot.hist(bins =50)
- df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':np.random.randn(1000)-1},columns=['a','b','c']) #元素比较复杂时,用多元字典来造
- 箱型图
- df = pd.DataFrame(np.random.rand(10,5),columns=['a','b','c','d','e'])
df.plot.box()
- df = pd.DataFrame(np.random.rand(10,5),columns=['a','b','c','d','e'])
第二章 pyecharts动态绘图模块
-
虚拟环境操作
- 创建虚拟环境:conda create --name 虚拟环境名 Python版本
- 激活虚拟环境: conda activate 虚拟环境名
- 关闭虚拟环境: deactivate
- 删除虚拟环境: conda remove -n 虚拟环境名 -all
-
pyecharts安装
- 在虚拟环境里面:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts
- conda自动关联(不同的需求对应不同的虚拟环境): conda install nb_conda
-
pyecharts基本使用
-
基本步骤:创建图形对象 ——添加绘图数据 ——配置系列参数——配置全局参数——渲染图片
from **pyecharts.charts** import Bar from **pyecharts** import **options** as opt bar.add_xaxis(['衬衣','毛衣','领带','裤子','风衣','高跟鞋','袜子']) #增加x轴数据 bar.add_yaxis('商场A',[21,344,284,22,128,234]) #增加y轴数据 bar.add_yaxis('商场B',[32,323,148,89,294,38]) #增加y轴数据 bar.set_global_opts(title_opts=opt.TitleOpts(title = '某商场销售情况')) # 设置全局参数 bar.render_notebook() #渲染图表并显示
-
-
pyechart链式调用
-
链式调用
from pyecharts.charts import Bar from pyecharts import options as opt bar =(Bar() .add_xaxis(['衬衣','毛衣','领带','裤子','风衣','高跟鞋','袜子']) .add_yaxis**('商场A',[21,344,284,22,128,234]) #增加y轴数据 .add_yaxis**('商场B',[32,323,148,89,294,38]) #增加y轴数据 .set_global_opts(title_opts=opt.TitleOpts(title = '某商场销售情况')) # 设置全局参数 bar.render_notebook()
-
-
链式调用加入主题
from pyecharts.globals import ThemeType #引入模块 bar = (Bar**(init_opts =opt.InitOpts(theme =ThemeType.DARK)) #说明使用的主题/风格** .add_xaxis(['衬衣','毛衣','高跟鞋','风衣','袜子','领带']) .add_yaxis('商场A',[364,38,273,94,437,138]) .add_yaxis('商场B',[462,328,34,282,43,98]) .set_global_opts(title_opts=opt.TitleOpts(title="商场销售情况"))) bar.render_notebook()
- pyechats 含有不同主题可以设置多元的图形视觉
-
pyecharts 绘制其他图形
-
横向条形图
bar =(Bar() .add_xaxis(['衬衣','毛衣','领带','裤子','风衣','高跟鞋','袜子']) .add_yaxis('商场A',[21,344,284,22,128,234]) #增加y轴数据 .add_yaxis('商场B',[32,323,148,89,294,38]) #增加y轴数据 .set_global_opts(title_opts=opt.TitleOpts(title = '某商场销售情况')) # 设置全局参数)** bar.reversal_axis() #翻转xy轴 bar.render_notebook()
-
-
折线图绘制
from pyecharts.charts import Line from pyecharts import options as opt line = (Line() .add_xaxis(["201{}第{}季度".format(y,z) for y in range(4) for z in range(1,5)]) .add_yaxis('电视机销量',[37,82,28,20,48,28,49,39,202,38,83,29,33,29,88,78]) .set_global_opts(title_opts =opt.TitleOpts(title ="折线图") ,xaxis_opts = opt.AxisOpts(axislabel_opts =opt.LabelOpts(rotate =-40)) #将x轴坐标标签旋转40度 ,yaxis_opts = opt.AxisOpts(**name="销量(单位/千台)")) ) line.render_notebook()
-
南丁格尔玫瑰图
-
本质上仍是饼图的一种,但不是用角度表示大小,而是用半径长短表示大小,角度均一致
from pyecharts.charts import Pie from pyecharts import options as opt pie=(Pie() .add("",[list(z)for z in zip(["201{}年第{}季度".format(x,y)for x in range(2) for y in range(1,3)] ,[30,19,21,60])] ,radius=["10%","60%"] #设定内外直径 , rosetype="area", #玫瑰图类型,仅有area与radius两种 ,label_opts= opt.LabelOpts(is_show=True)#选择是否设置数据标签) .set_global_opts(title_opts = opt.TitleOpts(title ="玫瑰图示例")) pie.render_notebook()
-
-
饼图
from pyecharts import options as opt from pyecharts.charts import Page,Pie **v1 =['啤酒','可乐','雪碧','咖啡','奶茶']** **v2 =[30,19,21,18,12]** pie = ( Pie() .add("",[list(z) for z in zip(v1,v2)]) #增加数组作为数据 .set_global_opts(title_opts=opt.TitleOpts(title="销售收入占比")) .set_series_opts(label_opts = opt.LabelOpts(formatter = "{b}:{c}%")) #设置数据标签: 名称:占比 ) pie.render_notebook()
-
雷达图
- 思路:难点在于设置参数,要设置多次,第一次是add_schema,加入维度及最大值,第二次及之后的add加入角色,视觉信息等
from **pyecharts.charts** import **Page,Radar** from **pyecharts** import options as **opts** v1=[[4300,10000,28000,35000,50000,19000]] v2=[[5000,14000,28000,31000,42000,21000]] radar = (Radar() .add_schema(schema=[opts.RadarIndicatorItem(name='KDA',max_=6500), #设置维度,及最大值 opts.RadarIndicatorItem(name='输出',max_=16000), opts.RadarIndicatorItem(name='经济',max_=30000), opts.RadarIndicatorItem(name='生存',max_=38000), opts.RadarIndicatorItem(name='推进',max_=52000), opts.RadarIndicatorItem(name='打野',max_=25000)]) .add("鲁班",v1, color="red",areastyle_opts=opts.AreaStyleOpts (opacity=0.5,color="red"))#设置角色1名称,内容,颜色,透明度及透明度颜色 .add("后裔",v2,color="blue",areastyle_opts=opts.AreaStyleOpts(opacity=0.5,color="blue"))#设置角色2名称,内容,颜色,透明度及透明度颜色 .set_global_opts**(title_opts=opts.TitleOpts(title="英雄成长对比")) #设置标题 .set_series_opts(**label_opts=opts.LabelOpts(is_show= True))) #设置标签 radar.render_notebook()
-
词云图
* 思路:先导入模块,再增加参数,然后配置全局变量,最后渲染显示,注意在导入参数时加入词云大小范围,导入参数时多导入一个SymbolType模块from pyecharts import options as opts from pyecharts.charts import Page,WordCloud from pyecharts.globals import SymbolType #除了导入两个模块以外还要导入SymbolType words =[('Sam S Club',10000),('Macys',6181),('Amy Schumer',4386),('Jurassic World',4055)] #用词组和数字,表示每个次多大 wordcloud = (WordCloud() .add("",words,word_size_range=[20,100])#输入参数时注意配置词的尺度范围 .set_global_opts(title_opts=opts.TitleOpts(title='词云图'))) wordcloud.render_notebook()
-
绘制地图
-
思路:仍然是先导入模块,再增加参数,然后配置全局变量,最后渲染显示的过程,在增加参数时,除了原有的参数要加入国家的参数如China,配置全局变量时要加入视觉参数
from pyecharts import options as opts from pyecharts.charts import Map v1= [29,191,99,101,64,44] v2= ['四川','广东',"杭州",'北京','湖南','云南'] map =(Map() .add("全国地图展示",[list(z)for z in zip(v2,v1)],"china") #除了本身的数据输入也要加入国家参数方便识别 .set_global_opts(title_opts=opts.TitleOpts(title="连续型地图"),visualmap_opts=opts.VisualMapOpts(max_=200))) #视觉参数方便显示 map.render_notebook()
-
第三章节 power BI部分(入门)
-
优势
步骤功能区域:- 免费,微软出品,符合日常办公习惯
- 方便快捷,快速展示图表需求
功能区(最上面),画布(中间白色部分),筛选器(画布右侧),图表类型、图表设计、字段选择(筛选器右侧)
-
流程
- 导入数据源——powerBI数据处理(数据清理、建模)——可视化报表展示
-
导入数据源
- 开始\获取数据\从数据库或者文件等
-
清洗数据
- 建议在sql或者pandas中处理,再倒入powerBI