前言 Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python. Matplotlib makes easy things easy and hard things possible.(官网 )
下载依赖
引入依赖 1 import matplotlib.pyplot as plt
修改字体
图表中默认字体不支持中文,中文会变成口
默认字体为sans-serif
查看字体名 1 cat ~/.matplotlib/fontlist-v330.json
修改字体 1 plt.rcParams["font.sans-serif" ] = ["SimHei" ]
指定备选字体 1 plt.rcParams["font.sans-serif" ] = ["SimHei" , "Microsoft YaHei" ]
解决修改字体后负号不显示的问题 1 plt.rcParams["axes.unicode_minus" ] = False
画布 1 plt.figure(figsize=(8 , 4 ), dpi=200 )
坐标系(subplot)
将多个坐标系按照两行一列的方式展现
subplot():第一个参数表示行,第二个参数表示列,第三个参数表示当前图表的顺序
1 2 3 4 5 plt.subplot(2 , 1 , 1 ) plt.plot(x, y) plt.subplot(2 , 1 , 2 ) plt.plot(x, y)
将多个坐标系按照一行两列的方式展现 1 2 3 4 5 plt.subplot(1 , 2 , 1 ) plt.plot(x, y) plt.subplot(1 , 2 , 2 ) plt.plot(x, y)
将多个坐标系自由合并单元格 1 2 3 4 5 6 fig = plt.figure(figsize=(8 , 4 ), dpi=200 ) gs = plt.GridSpec(2 , 3 ) fig.add_subplot(gs[0 :1 , 0 :1 ]) fig.add_subplot(gs[0 :1 , 1 :2 ]) fig.add_subplot(gs[0 :2 , 2 :3 ]) fig.add_subplot(gs[1 :2 , 0 :2 ])
将边框改为中心原点的平面直角坐标系 1 2 3 4 plt.spines["top" ].set_visible(False ) plt.spines["right" ].set_visible(False ) plt.spines["bottom" ].set_position("center" ) plt.spines["left" ].set_position("center" )
修改轴刻度 修改x轴刻度
labels=[]:定义标签
1 plt.xticks(np.arange(-1 , 1 , 0.1 ))
修改y轴刻度
1 plt.yticks(np.arange(-1 , 1 , 0.1 ))
嵌套坐标系 1 2 3 plt_object = plt.plot(x, y) add_axes_object = plt_object.add_axes((<x>, <y>, <width>, <height>)) add_axes_object.plot(x, y)
图表 折线图
color="black"、color=["black", "#000000"]:定义所有矩形颜色linewidth="<num>":线条粗细linestyle="<type>":网格线类型
--:虚线-.:点线
marker="*":在线条中添加标记
.、,、o、v、^、<、>、1、2、3、4、s、p、*、h、H、+、x、D、d、|、_
添加图例
label="":定义该折线的标签
1 2 plt.plot([<data_x_1>, <data_x_2>], [<data_y_1>, <data_y_2>], label="" ) plt.legend()
定义图例位置
loc="":定义图例位置
best:缺省值,自动摆放到最佳位置upper right、upper left、lower left、lower right、right、center left、center right、lower center、upper center、center
散点图
散点图用来看两个变量的关系
气泡图用来看多个变量的关系
1 plt.scatter([<data_x_1>, <data_x_2>], [<data_y_1>, <data_y_2>])
气泡图 1 plt.scatter([<data_x_1>, <data_x_2>], [<data_y_1>, <data_y_2>], s=np.abs (y) * 150 )
渐变色 1 plt.scatter([<data_x_1>, <data_x_2>], [<data_y_1>, <data_y_2>], c=y, cmap="Reds" )
彩虹色 1 plt.scatter([<data_x_1>, <data_x_2>], [<data_y_1>, <data_y_2>], c=y, cmap="rainbow" )
柱状图
width=<num>:柱子的宽度color="<color>"、color=["<color_1>", "<color_2>"]:柱子的颜色alpha=0.5:柱子透明度hatch="/":柱子花纹
/、///、***、xxx
yerr=[<num_1>, <num_2>]:定义误差值,显示误差线color="":误差线颜色capsize=<num>:误差线帽子的尺寸
1 plt.bar(np.arange(2 ), [<data_1>, <data_2>])
绘制多个柱子 1 2 plt.bar(np.arange(2 ) - 0.1 , [<data_1>, <data_2>]) plt.bar(np.arange(2 ) + 0.1 , [<data_1>, <data_2>])
修改轴刻度 修改x轴刻度
rotation=0:旋转标签labels=[""]:定义标签
1 2 plt.bar(np.arange(2 ), [<data_1>, <data_2>]) plt.xticks(np.arange(2 ))
修改y轴刻度 1 2 plt.bar(np.arange(2 ), [<data_1>, <data_2>]) plt.yticks(np.arange(0 , 100 ))
添加图例 1 2 plt.bar(np.arange(2 ), [<data_1>, <data_2>]) plt.legend()
堆叠柱状图 1 2 plt.bar(np.arange(2 ), [<data_1>, <data_2>]) plt.bar(np.arange(2 ), [<data_3>, <data_4>], bottom=[<data_1>, <data_2>])
对称条形图 1 2 plt.bar(np.arange(2 ), [<data_1>, <data_2>]) plt.bar(np.arange(2 ), (-1 ) * [<data_1>, <data_2>])
添加文字 1 2 plt.bar(np.arange(2 ), [<data_1>, <data_2>]) plt.text(0 , 0 , "文本内容" , ha="center" )
饼图
labels=[""]:定义标签labeldistance=0.5:定义标签到饼图圆心的距离autopct="%.2f%%":格式化数据pctdistance=0.5:定义数据到饼图圆心的距离explode=[0, 0.1]:定义饼图中每个块距离圆心的偏移量shadow=True:添加阴影wedgeprops={}:定义为环状饼图
"width": 0.25:定义圆环宽度"edgecolor": "w":定义分割线的颜色
textprops={}:设置文字属性
"fontsize": 12:设置文字字号"color": "k":设置文字颜色
1 plt.pie([<data_1>, <data_2>])
直方图 返回值返回每个箱子内的数据个数
bins=<num>:柱子个数color="":柱子颜色histtype="step":只显示轮廓不显示柱子
1 plt.hist([<data_1>, <data_2>], bins=20 )
返回值返回密度 1 plt.hist([<data_1>, <data_2>], bins=20 , density=True )
累计直方图 1 plt.hist([<data_1>, <data_2>], bins=20 , cumulative=True )
箱线图
showmeans=True:显示中位数notch=True:中位数展示为小蛮腰whis=1.5:数值判定法得到离群点的系数sym="x":异常值标记
1 plt.boxplot([<data_1>, <data_2>])
添加标题
添加文字
<x>:指定横轴坐标<y>:指定纵轴坐标fontdict={"<key>": <value>}:设置字体
"fortsize": <num>:指定字号"color": "<color>":指定颜色
1 plt.text(<x>, <y>, "文本内容" )
添加标注
xytext=(<x>, <y>):文字的位置xy=(<x>, <y>):箭头的位置fontsize=<num>:指定字号arrowprops={}:指定箭头属性arrowstyle:指定箭头类型
->、-|>
1 2 3 4 5 plt.annotate("文本内容" , xytext=(<x>, <y>), xy=(<x>, <y>), arrowprops={ "arrowstyle" : "->" , "color" : "" , "connectionstyle" : "angle3, angleA=90, angleB=0" , })
显示网格
alpha=0.5:网格透明度axis="<directions>":网格线方向
x:只显示x轴的纵向的网格线y:只显示y轴的横向的网格线
linestyle="<type>":网格线类型
--:虚线::点线
显示图表
保存图表为文件
保存到指定路径和文件格式 1 plt.savefig("<file>.png" )
1 plt.savefig("<file>.jpg" )
1 plt.savefig("<file>.svg" )
同时预览和图表为文件
要先保存到文件再显示,因为调用show()的时候会释放图表对象
1 2 plt.savefig() plt.show()
读取图片
如果是没有alpha通道的图片,读取后会得到三维数组
如果是有alpha通道的图片,读取后会得到四维数组
预览图片
<arr>:三维数组
完成 参考文献 哔哩哔哩——骆昊jackfrued CSDN——简时刻