Python Matplotlib绘制常用图表用法一览

导读


数据可视化是数据分析重要部分,可用于数据探索,帮助我们更好地传递\理解信息。Matplotlib是一个强大的工具包,包含完整的图表样式函数和个性化自定义设置,几乎可以满足工作中大部分需求。本文主要介绍利用matplotlib库绘制常见图如折线图\柱状图\散点图\气泡图\面积图\雷达图\箱形图\饼图\热力图等例,希望大家能快速掌握其可视化方法和技巧。

导入库

import matplotlib.pyplot as plt
import numpy as np

折线图

常用于表示随时间推移指标变化趋势,plot方法

plt.plot(x,y,color,linestyle,linewidth,marker,markerredgecolor,markerwidth,markerfacecolor,markersize,label)
 1#快速简单折线图
 2from matplotlib import pyplot as plt
 3%matplotlib inline  
 4x = [2,2,3,6]
 5y = [5,14,4,9]
 6plt.plot(x,y)
 7#综合示例
 8%matplotlib inline
 9#让图表在jupyterNotebook中展示出来
10plt.rcParams["font.sans-serif"]='SimHei'
11#解决中文乱码问题
12plt.rcParams['axes.unicode_minus']=False
13#解决负号无法显示的问题
14%config InlineBackend.figure_format='svg'
15#默认设置下matplotlib图表不是很清晰设置成矢量格式显示
16plt.subplot(1,1,1)
17x=np.array([1,2,3,4,5,6,7,8,9,10,11,12])
18y=np.array([12,23,32,35,38,40,45,36,34,45,20,10])
19plt.plot(x,y,color="k",linestyle="dashed",linewidth=1,marker='^',markersize=5,label="能耗强度")
20plt.title("各类型建筑能耗指标",loc="center")
21#添加数据标签  
22for a,b in  zip(x,y):
23    plt.text(a,b+1,b,ha='center',va="bottom",fontsize=11)
24plt.ylim(0,50)
25plt.tick_params(axis='x', which='major', colors='k', direction='in')
26plt.tick_params(axis="y",which='major', colors='k', direction='in')
27plt.xlim(0, 13)
28plt.xticks(range(13))
29plt.xlabel("月份", color='blue',labelpad=10)
30plt.ylabel("单位面积能耗强度", color='blue',labelpad=10)
31plt.grid(True)
32plt.legend()
33plt.savefig(r"C:\Users\CQ375\Desktop\ex\plot.jpg")
Python Matplotlib绘制常用图表用法一览

Python Matplotlib绘制常用图表用法一览

柱形图

用于比较不同类别之间的数据情况,plt库中bar.

plt.bar(x,height,width=0.8,bottom=None,align='center',color,edgecolor)


x表示什么位置显示柱形图;height表示每根柱子高度,width表示宽度,可以都一样,也可各不同;bottom表示每根柱子底部位置,可同可不同;align表示柱子位置与x值关系,有center、edge可选,center表示位于x值中心位置,edge表示柱子位于x值边缘位置。color颜色,edgecolor表示柱子边缘颜色。

 1plt.subplot(1,1,1)
 2x=np.array(["福田区","龙岗区","龙华区","光明区","宝安区","盐田区","南山区","罗湖区"])
 3y=np.array([67,56,76,34,87,78,86,45])
 4plt.bar(x,y,width=0.5,align="center")
 5plt.title("深圳市各区域能耗指标",loc="center")
 6for a,b in zip(x,y):   
 7    plt.text(a,b,b,ha="center",va="bottom",fontsize=12)#添加数据标签
 8plt.ylim(0,100)
 9plt.xlabel('区域',labelpad=10)
10plt.ylabel('能耗指标')
11plt.savefig(r"C:\Users\CQ375\Desktop\ex\bar.jpg")
12
13# 条形图
14# 将柱形图x轴和y轴调换,barh方法
15# plt.barh(y,width,height,align,color,edgecolor)
Python Matplotlib绘制常用图表用法一览

簇状柱形图表示不同类别随着同一变量的变化情况,bar方法,但需要调柱子的显示位置。 1plt.subplot(1,1,1)
2x=np.array([1,2,3,4])
3y1=np.array([8756,4578,8675,3234])
4y2=np.array([5467,3456,7656,2345])
5
6plt.bar(x,y1,width=0.3,label="任务量")
7plt.bar(x+0.3,y2,width=0.3,label="完成量")
8
9#添加数据标签
10for a,b in zip(x,y1):
11 plt.text(a,b,b,ha="center",va="bottom",fontsize=12)
12for a,b in zip(x+0.3,y2):
13 plt.text(a,b,b,ha="center",va="bottom",fontsize=12)
14plt.title("深圳市各区域任务量和完成量",loc="center")
15plt.xlabel('区域')
16plt.ylabel('任务情况')
17plt.xticks(x+0.15,["福田区","龙岗区","龙华区","光明区"])
18plt.ylim(0,10000)
19plt.grid(False)
20plt.legend()
21plt.savefig(r"C:\Users\CQ375\Desktop\ex\bar1.jpg")

Python Matplotlib绘制常用图表用法一览

堆积柱形图用来比较同类别各变量和不同类别变量的总和差异。在相同的x位置绘制不同的y,y就会自动叠加。 1plt.subplot(1,1,1)
2x=np.array(["福田区","龙岗区","龙华区","光明区"])
3y1=np.array([8756,4578,8675,3234])
4y2=np.array([5467,3456,7656,2345])
5plt.bar(x,y1,width=0.3,label="任务量")
6plt.bar(x,y2,width=0.3,label="完成量")
7plt.title("深圳市各区域任务量和完成量",loc="center")
8#添加数据标签
9for a,b in zip(x,y1):
10 plt.text(a,b,b,ha="center",va="bottom",fontsize=12)
11for a,b in zip(x,y2):
12 plt.text(a,b,b,ha="center",va="top",fontsize=12)
13plt.xlabel('区域')
14plt.ylabel('任务情况')
15plt.ylim(0,10000)
16plt.grid(False)
17plt.legend(loc="upper right",ncol=1)
18plt.savefig(r"C:\Users\CQ375\Desktop\ex\bar3.jpg")

Python Matplotlib绘制常用图表用法一览

散点图

用来发现各变量之间的相关关系,scatter方法

plt.scatter(x,y,s,c,marker,linewidths,edgecolors)

(x,y)表示散点位置,s表示每个点面积即点大小,c表示点颜色,marker点标记,linewidth每个点线宽,edgecolors表示每个散点外轮廓颜色。

 1plt.subplot(1,1,1)
 2x=[12,13,15,18,19,20,21]
 3y=[62,72,82,85,88,87,90]
 4plt.scatter(x,y,s=100,marker="o",c="red")
 5plt.title("平均平温与能耗用量关系图",loc="center")
 6plt.xlabel('平均气温')
 7plt.ylabel('能耗用量')
 8plt.xlim(10,22)
 9plt.grid(False)
10plt.savefig(r"C:\Users\CQ375\Desktop\ex\scatter.jpg")
Python Matplotlib绘制常用图表用法一览

气泡图与散点图类似,气泡图各点大小不一样,scatter方法,需要让不同点大小不一样即可。即修改参数s 1plt.subplot(1,1,1)
2x=[12,13,15,18,19,20,21]
3y=[20,40,60,85,80,100,120]
4s=y*100
5plt.scatter(x,y,s=s,marker="o",c="b")
6plt.title("平均平温与能耗用量关系图",loc="center")
7plt.xlabel('平均气温')
8plt.ylabel('能耗用量')
9plt.xlim(10,22)
10plt.grid(False)
11plt.savefig(r"C:\Users\CQ375\Desktop\ex\scatter1.jpg")

Python Matplotlib绘制常用图表用法一览

面积图

plt.stackplot(x,y,labels,colors)
 1import matplotlib.pyplot as plt
 2x= [1,2,3,4,5]  
 3sleeping =[7,8,6,11,7]
 4eating = [2,3,4,3,2]
 5working =[7,8,7,2,2]
 6playing = [8,5,7,8,13]  
 7plt.plot([],[],color='m', label='Sleeping', linewidth=5)
 8plt.plot([],[],color='c', label='Eating', linewidth=5)
 9plt.plot([],[],color='r', label='Working', linewidth=5)
10plt.plot([],[],color='b', label='Playing', linewidth=5)  
11plt.stackplot(x,sleeping,eating,working,playing, colors=['m','c','r','b'])  
12plt.xticks(range(1,6,1))
13plt.xlabel('星期')
14plt.ylabel('时间')
15plt.title('面积图')
16plt.legend()
17plt.show()
Python Matplotlib绘制常用图表用法一览

雷达图

综合评价某一事物,直观看出该事物的优势与不足。polar方法。

plt.polar(theta,r,color,marker,linewidth)

theta每一点在极坐标中角度,r半径,color连接各点线颜色,marker标记物,linewidth线宽

 1plt.subplot(1,1,1,polar=True)
 2dataLenth=4
 3angles=np.linspace(0,2*np.pi,dataLenth,endpoint=False)
 4labels=['分析型','驾驶型','亲和型','表达型']
 5data=[2,3.5,4,4.5]
 6data=np.concatenate((data,[data[0]]))#闭合
 7angles=np.concatenate((angles,[angles[0]]))#闭合
 8plt.polar(angles,data,color='r',marker="o")
 9plt.xticks(angles,labels)
10plt.title("综合等级",pad=14)
11plt.savefig(r"C:\Users\CQ375\Desktop\ex\polarplot.jpg")
Python Matplotlib绘制常用图表用法一览

箱形图

用来反映一组数据离散情况,boxplot方法

plt.boxplot(x,vert,widths,labels)

x待绘图源数据,vert箱形图方向,如果True则纵向,False横向,默认为True,widths箱形图宽度,labels箱线图标签。

1plt.subplot(1,1,1)
2y1=np.array([4360,3835,3453,3856,4434,4365,3462,3456,3345])
3y2=np.array([4360,3835,3453,3856,5434,5365,3462,3456,3345])
4x=[y1,y2]
5labels=["建筑1","建筑2"]
6plt.boxplot(x,labels=labels,vert=True,widths=[0.2,0.4])
7plt.title("建筑能耗",loc="center")
8plt.grid(False)
9plt.savefig(r"C:\Users\CQ375\Desktop\ex\boxplot.jpg")
Python Matplotlib绘制常用图表用法一览

饼图

表示同一等级中不同类别占比情况

plt.pie(x,explode,labels,colors,autopct,pctdistance,shadow,labeldistance,startangle,radius,counterclock,wedgeprops,textprops,center,frame)

x待绘图数据;explode饼图中每一块离圆心距离,labels标签,colors颜色,autopct控制饼图内数值百分比格式,pctdistance数据标签距离中心距离,shadow是否有阴影,labeldistance每一块索引距离中心距离,startangle初始角度,radius半径,counterclock是否让饼图逆时针显示,wedgeprops饼图内外边界属性,textprops文本相关属性,center中心位置,frame是否显示饼图背后图框

1plt.subplot(1,1,1)
2x=np.array([8566,5335,7310,6482])
3labels=["照明插座用电","空调用电","动力用电","特殊用电"]
4explode=[0.15,0,0,0]
5plt.pie(x,labels=labels,autopct='%.2f%%',shadow=True,radius=1,explode=explode,labeldistance=1.2)
6plt.title("分项用电占比",loc="center")
7plt.savefig(r"C:\Users\CQ375\Desktop\ex\pie.jpg")
Python Matplotlib绘制常用图表用法一览

热力图

可以看数据表里多个特征两两的相似度。将某一事物响应程度反映在图上,可以快速发现重点关注的区域,imshow方法。

plt.imshow(x,cmap)

x表示待绘图数据,需要矩阵形式;cmap配色方案,表明图渐变的主题色。cmap所有可选值都封装在plt.cm里,在Jupyter Notebook中输入plt.cm.按Tab键可见

 1import itertools#几个指标之间相关性
 2cm=np.array([[1,0.082,0.031,-0.0086],[0.082,1,-0.063,0.062],[0.031,-0.09,1,0.026],[-0.0086,0.062,0.026,1]])
 3cmap=plt.cm.cool#设置配色方案
 4plt.imshow(cm,cmap=cmap)
 5plt.colorbar()#显示右边颜色条
 6classes=["负载率","信贷数量","年龄","家属数量"]
 7tick_marks=np.arange(len(classes))
 8plt.xticks(tick_marks,classes)
 9plt.yticks(tick_marks,classes)
10for i,j in itertools.product(range(cm.shape[0]),range(cm.shape[1])):
11    plt.text(j,i,cm[i,j],horizontalalignment="center")#将数值显示在指定位置
12plt.grid(False)
13plt.savefig(r"C:\Users\CQ375\Desktop\ex\imshow.jpg")
Python Matplotlib绘制常用图表用法一览

seaborn其实是在matplotlib基础上更高级的API封装,使得绘图更容易、更美观。 1import seaborn as sns
2% matplotlib inline
3plt.subplot(1,1,1)
4pt= np.random.randint(low=0,high=100,size=(8,8))
5# cmap用matplotlib colormap
6sns.heatmap(pt,linewidths = 0.05, vmax=100, vmin=0, cmap='rainbow')
7# rainbow为 matplotlib 的colormap名称
8plt.title('热力图')
9plt.xlabel('region')
10plt.ylabel('kind')

Python Matplotlib绘制常用图表用法一览

绘制水平线和垂直线

主要用来做对比参考,plt库中axhline和axvline方法。


plt.axhline(y,xmin,xmax)
plt.axvline(x,ymin,ymax)
1plt.subplot(1,2,1)
2plt.xlim(0,2)
3plt.ylim(0,4)
4plt.axhline(y=2,xmin=0,xmax=1,color='b')
5plt.subplot(1,2,2)
6plt.xlim(1,4)
7plt.ylim(1,4)
8plt.axvline(x=2,ymin=0,ymax=4,color='r')


Python Matplotlib绘制常用图表用法一览

备注:

以上示例数据均属于虚构,非真实数据

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章