pythonmatplotlib库的用处(PythonMatplotlib库用法笔记)
- 一、了解Matplotlib库
- 1 Matplotlib是什么
- 2 Matplotlib的作用
- 3利用Matplotlib做一个简单的画图
- 3.1matplotlib.pyplot模块
- 3.2画图
- 4 Matplotlib的三层结构
- 4.1容器层
- 4.2 辅助显示层
- 4.3图像层
- 二、折线图
- 1 折线图的绘制与显示
- 1.1设置图形的风格
- 2 设置画布属性
- 2.1 代码示例
- 3 图片的保存
- 4 设置辅助显示层
- 4.1 自定义x,y刻度
- 4.2 添加网格显示
- 4.3添加描述信息
- 5 设置图像层
- 5.1 再添加一条折线
- 6 多个坐标系显示折线图
- 三、散点图
- 3.1散点图的绘制
- 四、柱状图
- 4.1一个类别单个柱状图
- 4.2一个类别多个柱状图
- 五、直方图
- 5.1 直方图与柱状图的区别
- 5.2 直方图的绘制
- 六、饼图
- 6.1 饼图的绘制
用于日常学习的积累,如有不足请多多指教。
一、了解Matplotlib库1 Matplotlib是什么Matplotlib可以看成是3个缩写单词拼接而成:·mat(matrix) 矩阵·plot 绘图·lib(library)库
Matplotlib 是一个 Python 的二维图表库。
2 Matplotlib的作用将数据可视化,是数据更加置换
3利用Matplotlib做一个简单的画图3.1matplotlib.pyplot模块matplotlib.pyplot模块包含了一系列类似于matlab的画图函数。
3.2画图
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt plt.figure() #创建画布 plt.plot([1, 2, 3, 4, 5, 6], [1, 4, 9, 16, 25, 36]) #绘制图像 plt.show() #显示图像
4 Matplotlib的三层结构4.1容器层
- 画板层Canvas(位于最底层,一般用户接触不到)位于最底层的系统层,充当画板的角色。
- 画布层Figure(在Canvas层之上)是用户操作的第一层应用层,充当画布的角色。
plt.figure()
- 绘图区/坐标系Axes(在Figure层之上)应用层的第二层。
plt.subplots()
- 相互关系
4.2 辅助显示层
- 一个figure可以包含多个axes,一个axes只能属于一个figure。
- 一个axes(绘图区/坐标系)可以包含多个axis(坐标轴)。
辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。
4.3图像层图像层指Axes内通过plot、scatter、bar、histogram、pie等函数根据数据绘制出的图像。
二、折线图1 折线图的绘制与显示
- 折线图绘制的步骤
- 创建画布
- 绘制图像
- 显示图像具体和上面的做一个简单的画图的代码一致:
import matplotlib.pyplot as plt plt.figure() #创建画布 plt.plot([1, 2, 3, 4, 5, 6], [1, 4, 9, 16, 25, 36]) #绘制图像 plt.show() #显示图像
1.1设置图形的风格
plt.plot(x,y,color='k',linestyle=':') #color设置线条颜色 #linestyle设置线条风格
对上述代码进行修改:
import matplotlib.pyplot as plt x=[1,2,3,4,5,6] y=[1,4,9,16,25,36] plt.figure() #创建画布 plt.plot(x,y,color='k',linestyle=':') #绘制图像 plt.show() #显示图像
结果:
2 设置画布属性
2.1 代码示例
plt.figure(figsize=(),dpi=) #figsize:指定图的长宽 #dpi:图像的清晰度
import matplotlib.pyplot as plt plt.figure(figsize=(5,5),dpi=100) #创建画布 plt.plot([1, 2, 3, 4, 5, 6], [1, 4, 9, 16, 25, 36]) #绘制图像 plt.show() #显示图像
3 图片的保存
import matplotlib.pyplot as plt plt.figure(figsize=(5,5),dpi=100) #创建画布 plt.plot([1, 2, 3, 4, 5, 6], [1, 4, 9, 16, 25, 36]) #绘制图像 plt.savefig("1.png") #保存在相对路径上 plt.show() #显示图像
注意:plt.savefig(path)不能写在plt.show() 之后。(plt.show()会释放figgure的资源,此时在保存图片就是空图片)
4 设置辅助显示层4.1 自定义x,y刻度
#自定义x轴 plt.xticks(x,tick labels) #刻度标签(tick labels)可以对应替换x #自定义y轴 plt.yticks(y,tick labels) #刻度标签(tick labels)可以对应替换y
- 代码示例:
import matplotlib.pyplot as plt x=[1,2,3,4,5] y=[1,4,9,16,25] plt.figure(figsize=(5,5),dpi=100) plt.plot(x,y) plt.xticks(x,["一","二","三","四","五"]) plt.show()
结果:
注意:默认字体不支持中文,会变成上图的白色框框。
import matplotlib.pyplot as plt x=[1,2,3,4,5] y=[1,4,9,16,25] plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示问题 plt.figure(figsize=(5,5),dpi=100) plt.plot(x,y) plt.xticks(x,["一","二","三","四","五"]) plt.show()
结果:
4.2 添加网格显示
plt.grid(True,linestyle,alpha) #linestyle是指线条风格 #alpha是指透明度
- 代码示例:
import matplotlib.pyplot as plt x=[1,2,3,4,5] y=[1,4,9,16,25] plt.figure(figsize=(5,5),dpi=100) plt.plot(x,y) plt.grid(True,linestyle="--",alpha=0.8) #添加网格显示 plt.show()
结果:
4.3添加描述信息
plt.xlabel(str) plt.ylabel(str) plt.title(str)
- 代码示例:
import matplotlib.pyplot as plt x=[1,2,3,4,5] y=[1,4,9,16,25] plt.figure(figsize=(5,5),dpi=100) plt.plot(x,y) plt.xlabel("x") plt.ylabel("x的平方") plt.title("x平方的函数图像") plt.grid(True,linestyle="--",alpha=0.8) plt.show()
结果:
5 设置图像层5.1 再添加一条折线
再次使用plt.plot()就可以再添加一条曲线。其中,可以在plot()中设置对应曲线的标签:
plt.plot(x,y_2x,label='2x')
并加入以下图像层的代码将其展示出来:
plt.legend()
- 代码示例:
import matplotlib.pyplot as plt x=[0,1,2,3,4,5] y_2x=[2*i for i in range(6)] y_3x=[3*i for i in range(6)] #创建画布 plt.figure(figsize=(5,5),dpi=100) #绘制图像 plt.plot(x,y_2x,label='2x') plt.plot(x,y_3x,label='3x') #再添加一条折线 plt.legend() plt.show() #显示图像
结果:
6 多个坐标系显示折线图
figure, axes = plt.subplots(nrows=1, ncols=2) #nrows:行 #ncols:列
注意:此时为面向对象的编程,注意代码的不同。
- 代码示例:
import matplotlib.pyplot as plt x=[0,1,2,3,4,5] y_2x=[2*i for i in range(6)] y_3x=[3*i for i in range(6)] #创建画布 #plt.figure(figsize=(5,5),dpi=100) figure, axes = plt.subplots(nrows=1, ncols=2,figsize=(10,5),dpi=100) #绘制图像 #plt.plot(x,y_2x,label='2x') axes[0].plot(x,y_2x,label='2x') #plt.plot(x,y_3x,label='3x') axes[1].plot(x,y_3x,label='3x') #显示图例 #plt.legend() axes[0].legend() axes[1].legend() #修改刻度 axes[0].set_xticks(x[::1]) axes[0].set_yticks(range(0,20)[::2]) axes[1].set_xticks(x[::1]) axes[1].set_yticks(range(0,20)[::2]) #添加描述信息 axes[0].set_xlabel("x") axes[0].set_ylabel("2x") axes[0].set_title("y=2x") axes[1].set_xlabel("x") axes[1].set_ylabel("3x") axes[1].set_title("y=3x") #显示图像 plt.show()
三、散点图
分析不同变量之间的关系/规律
3.1散点图的绘制
plt.scatter(x,y)
import matplotlib.pyplot as plt #数据 math_score=[140,96,134,108,88] physics_score=[95,78,86,81,72] #创建画布 plt.figure() #绘制散点图 plt.scatter(math_score,physics_score) #显示图像 plt.show()
结果:
四、柱状图
统计不同类别的数量大小,比较数据之间的差异
4.1一个类别单个柱状图
plt.bar(x,width,...) #x为数据 #width为柱宽
- 代码示例:
import matplotlib.pyplot as plt #数据 students=["小明","小红","小刚","小智","小华"] math_score=[140,96,134,108,88] #创建画布 plt.figure() #绘制图像 plt.bar(range(0,5),math_score,color=['r','y','g','c','b']) #采用不同颜色绘制柱状图 #修改刻度 plt.xticks(range(0,5),students) #添加标题 plt.title("数学成绩") #添加网格显示 plt.grid(linestyle=":",alpha=0.5) #显示图像 plt.show()
结果:
4.2一个类别多个柱状图
- 代码示例:
import matplotlib.pyplot as plt #数据 students=["小明","小红","小刚","小智","小华"] math_score=[i/150 for i in [140,96,134,108,88]] physics_score=[i/100 for i in [95,78,86,81,72]] #创建画布 plt.figure() #绘制图像 plt.bar(range(0,5),math_score,color='r',width=0.2) plt.bar([i-0.2 for i in range(0,5)],physics_score,color='b',width=0.2)#注意刻度要作出调整,不然会重叠在一起 #修改刻度 plt.xticks([i-0.1 for i in range(0,5)],students) #添加标题 plt.title("数学和物理成绩得分情况") #添加网格显示 plt.grid(linestyle=":",alpha=0.5) #显示图像 plt.show()
结果:
五、直方图
表示数据分布状况
5.1 直方图与柱状图的区别
plt.hist(x,bins,density,...) #x为数据 #bins为组数 #density为是否显示频率(默认不显示)
5.2 直方图的绘制
直方图
柱状图
展示数据的分布
比较数据的大小
x轴展示的是数字区间
x轴展示的是分类数据
柱子间无间隔
柱子间有间隔
柱子宽度有意义
import matplotlib.pyplot as plt #数据 math_score=[140,96,134,108,138,128,128,117,126,116,100,114,115,116,112,116,101,102,89,96,85,108,92,75,116,92,124,150] #创建画布 plt.figure(figsize=(20,10),dpi=100) #绘制图像 d=3 group_num = (max(math_score)-min(math_score))//d #组数=(最大值-最小值)//组距 plt.hist(math_score,bins=group_num,density=True) #修改刻度 plt.xticks(range(min(math_score),max(math_score) d,d)) #添加标题 plt.title("数学成绩直方图") #添加网格显示 plt.grid(linestyle=":",alpha=0.5) #显示图像 plt.show()
结果:
六、饼图
不同数据占比情况(类别太多不建议使用)
6.1 饼图的绘制
plt.pie(x,labels,autopct,colors,...) #x:数量 #labels:每部分的名称 #autopct:占比显示 #colors:每部分颜色
import matplotlib.pyplot as plt #数据 students=["小明","小红","小刚","小智","小华"] duty_days=[3,5,8,6,8] #创建画布 plt.figure() #绘制图像 plt.pie(duty_days,labels=students,autopct="%1.2f%%",colors=['r','y','c','b','g']) plt.axis('equal')#保证饼图长宽一致 #显示图例 plt.legend() #修改刻度 plt.xticks() #添加标题 plt.title("上月同学值日天数") #添加网格显示 plt.grid(linestyle=":",alpha=0.5) #显示图像 plt.show()
结果:
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com