折线图:一条线用一组x和y的数组,这些数组可以是自定义也可以是从其他文件读入
import matplotlib.pyplot as plt a=[1,5,3,4,5] plt.plot(a)
import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False df=pd.read_excel('.\互联网公司股票.xlsx',parse_date=['日期'],index_col='日期') df['收盘'].plot()
需要数组作为x和y轴的值
import numpy as np import matplotlib.pyplot as plt x=[1,2,3] y=[3,5,8] plt.bar(x,y)
3. 条形图 (barh)
需要数组作为x和y轴的值
import numpy as np import matplotlib.pyplot as plt x=[1,2,3] y=[3,5,8] plt.barh(x,y)
4. 堆积图 (bar,barh,stackplot)
1)堆积柱形图
画出一个简单的柱形图,在以画好的图作为底部的基础,继续画图
import numpy as np import matplotlib.pyplot as plt x=[1,2,3] y=[3,5,8] a=np.arange(3) plt.bar(a,x) plt.bar(a,y,bottom=x) plt.show()
2)堆积条形图
画出一个简单的柱条形图,在以画好的图作为左边的基础,继续画图
import numpy as np import matplotlib.pyplot as plt x=[1,2,3] x2=[4,5,6] y=[3,5,8] plt.barh(y,x) plt.barh(y,x2,left=x) plt.show()
3) 堆积面积图(stackplot)
多个y轴的数组,多条线叠加
#堆积面积图,y轴的点连成一条线,后一条是在前一条的基础上叠加 import numpy as np import matplotlib.pyplot as plt x=np.arange(6) y1=np.array([1,2,3,4,5,6]) y2=np.array([1,3,3,4,5,6]) y3=np.array([1,5,3,4,5,6]) plt.stackplot(x,y1,y2,y3) plt.show()
5. 饼图/圆环图(pie)
1)饼图
主要是数据和标签
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False data=np.array([10,20,40,70,100]) label=np.array(['购物','人情往来','生活日用','休闲娱乐','学习支出']) plt.pie(data,labels=label,autopct='%3.1f%%')
2)圆环图
需要数据,标签、大圆半径和保留的半径长度
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False data=np.array([10,20,40,70,100]) label=np.array(['购物','人情往来','生活日用','休闲娱乐','学习支出']) plt.pie(data,labels=label,autopct='%3.1f%%',radius=1.2,wedgeprops={'width':0.7})
6. 散点图、气泡图(scatter)
1)散点图
scatter(x,y) x和y都是长度相同的数组,数组元素一一对应,形成点
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False #scatter(x,y) x和y都是长度相同的数组,数组元素一一对应,形成点 num=20 x=np.random.rand(num) y=np.random.rand(num) plt.scatter(x,y
2)气泡图
气泡图其实就是散点图再加一个点的大小的数组,所以就是x、y的数组和对应点的大小的数组
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False #scatter(x,y) x和y都是长度相同的数组,数组元素一一对应,形成点 num=20 x=np.random.rand(num) y=np.random.rand(num) area=(40*y)**2 plt.scatter(x,y,s=area)
7. 箱形图 (boxplot)
最关键的就是输入数据,其他的有的是输入数据的方式不一样,样式不一样
import numpy as np import matplotlib.pyplot as plt # 用于正常显示中文 plt.rcParams['font.sans-serif'] = 'SimHei' #用于正常显示符号 plt.rcParams['axes.unicode_minus'] = False data=np.random.rand(10) plt.boxplot(data) plt.show()
import pandas as pd import matplotlib.pyplot as plt #美化图形 plt.style.use('ggplot') #读入excel表格 excelbook=pd.read_excel('./大二分数.xlsx') num=excelbook['分数'] ## 设置中文和负号正常显示 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False #patch_artist=True : 设置自定义颜色填充箱形图 #showmeans=True :以点的形式显示均值 #boxprops = {'color':'black','facecolor':'#9999ff'}, # 设置箱体属性,填充色和边框色 #flierprops = {'marker':'o','markerfacecolor':'red','color':'black'}, # 设置异常值属性,点的形状、填充色和边框色 #meanprops : 设置均值的属性 #medianprops : 设置中位线的属性 plt.boxplot(x=num,showmeans=True,patch_artist=True,boxprops={'color':'green','facecolor':'pink'}, flierprops={'marker':'o','markerfacecolor':'red','color':'blue'}, meanprops={'marker':'D','markerfacecolor':'purple'}, medianprops={'linestyle':'--','color':'black'})
8. 雷达图 (polar)
polar(角度,到原点的距离)
import numpy as np import matplotlib.pyplot as plt # 用于正常显示中文 plt.rcParams['font.sans-serif'] = 'SimHei' #用于正常显示符号 plt.rcParams['axes.unicode_minus'] = False dim_num=6 #数据,角度,维度标签 data=np.array([ [0.40,0.32,0.35,0.30,0.30,0.88], [0.32,0.35,0.54,0.23,0.43,0.90], [0.23,0.43,0.90,0.32,0.35,0.67], [0.40,0.32,0.35,0.30,0.30,0.60], [0.40,0.32,0.77,0.20,0.30,0.60], [0.23,0.43,0.90,0.32,0.39,0.56], ]) angle=np.linspace(0,2*np.pi,dim_num,endpoint=False) label=['研究型','艺术型','社会型', '企业型','传统型','现实型'] #把数据,角度,维度标签闭合,围成一圈 data=np.concatenate((data,[data[0]])) angle=np.concatenate((angle,[angle[0]])) label=np.concatenate((label,[label[0]])) #先绘制雷达图 plt.polar(angle,data) #设置极坐标的标签 plt.thetagrids(angle*180/np.pi,labels=label) #填充多边形 plt.fill(angle,data,alpha=0.39)
9. 误差棒图 (errorbar)
x轴,y轴,和误差,3个数组
import numpy as np import matplotlib.pyplot as plt # 用于正常显示中文 plt.rcParams['font.sans-serif'] = 'SimHei' #用于正常显示符号 plt.rcParams['axes.unicode_minus'] = False x=np.arange(5) y=[10,12,15,16,19] yerror=[3,2,1,3,5] plt.errorbar(x,y,yerr=yerror,capsize=6,capthick=3) plt.show()
10.树地图
整体分成好多块,饼状图不够用时用树地图
#导包 import matplotlib.pyplot as plt import squarify #中文和负号处理办法 plt.rcParams['font.sans-serif']=['Microsoft YaHei'] plt.rcParams['axes.unicode_minus']=False #设置警告消除 import warnings warnings.filterwarnings('ignore') #创建数据 #三个数组,各个数据要一一对应 name=['国内增值税','国内消费税','企业所得税','个人所得税', '进口增值税、消费税','出口退税','城市维护建设税', '车辆购置税','印花税','资源税','土地和房税','车船税烟叶税等'] income=[3908,856,801,868,1361,1042,320,291,175,111,414,63] colors = ['steelblue','#9999ff','red','indianred', 'green','yellow','orange'] #绘图 plot=squarify.plot( # 绘图数据 sizes=income, # 数值标签 value=income, # 标签 label=name, # 自定义颜色 color=colors, # 透明度 alpha=0.6, # 边框颜色 edgecolor='white', # 边框宽度 linewidth=1, ) #树地图要去掉坐标轴, plt.axis('off') #去掉上边和有右边的刻度 plt.tick_params(top='off',right='off') #设置标签大小 plt.rc('font',size=16) #设置标题大小 plot.set_title('2017年8月中央财政收支情况',fontdict={'fontsize':15}) plt.show()