用于日常学习的积累,如有不足请多多指教。
Matplotlib可以看成是3个缩写单词拼接而成:
·mat(matrix) 矩阵
·plot 绘图
·lib(library)库
Matplotlib 是一个 Python 的二维图表库。
将数据可视化,是数据更加置换
matplotlib.pyplot模块包含了一系列类似于matlab的画图函数。
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() #显示图像
plt.figure()
plt.subplots()
辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。
图像层指Axes内通过plot、scatter、bar、histogram、pie等函数根据数据绘制出的图像。
import matplotlib.pyplot as plt
plt.figure() #创建画布
plt.plot([1, 2, 3, 4, 5, 6], [1, 4, 9, 16, 25, 36]) #绘制图像
plt.show() #显示图像
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() #显示图像
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() #显示图像
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的资源,此时在保存图片就是空图片)
#自定义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()
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()
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()
再次使用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() #显示图像
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()
分析不同变量之间的关系/规律
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()
统计不同类别的数量大小,比较数据之间的差异
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()
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()
表示数据分布状况
plt.hist(x,bins,density,...)
#x为数据
#bins为组数
#density为是否显示频率(默认不显示)
直方图 | 柱状图 |
---|---|
展示数据的分布 | 比较数据的大小 |
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()
不同数据占比情况(类别太多不建议使用)
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()