目录
- 系列文章目录
- 前言
- 一、多张子图的参数设置
- 1. 子图(subplots)
- 2. 子图y轴坐标说明(set_ylabel),子图x轴坐标说明(set_xlabel),设置子图标题(set_title)
- 3. 图片总标题(suptitle)
- 4. 刻度参数设置(tick_parms)
- 5. 刻度标签的字体(get_xticklabels)(set_fontproperties)
- 总结
系列文章目录
- 第一章 Python常见库matplotlib之画图文字的中文显示
- 第二章 Python常见库matplotlib之画图中各个模块的含义及修改方式
- 第三章 Python常见库matplotlib之多个子图绘图
前言
前两章介绍了单张图的绘图操作,这一章介绍下在一张图中画多个图的操作。我们把前一篇的程序稍微改动一下,上一篇中是将正弦函数和余弦函数画在一张图中,这一次我们将两个曲线分别画在不同的子图中。
完整程序如下所示:
import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as fm # 指定字体 font_path = 'SIMSUN.TTC' font_prop = fm.FontProperties(fname=font_path, size=12) en_font_path = 'TIMES.TTF' en_font_prop = fm.FontProperties(fname=en_font_path, size=12) x = np.linspace(0, 2 * np.pi, 100) y1 = np.sin(x) y2 = np.cos(x) fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 6)) ax1.plot(x, y1, label=u'正弦曲线', color='blue') ax1.set_ylabel('正弦值', fontproperties=font_prop) ax1.set_xlabel('横轴', fontproperties=font_prop) ax1.set_title('正弦函数', fontproperties=font_prop) plt.subplots_adjust(hspace=0.6) # 调整子图之间的距离 ax2.plot(x, y2, label=u'余弦曲线', color='red') ax2.set_ylabel('余弦值', fontproperties=font_prop) ax2.set_xlabel('横轴', fontproperties=font_prop) ax2.set_title('余弦函数', fontproperties=font_prop) plt.suptitle('函数', fontproperties=font_prop) ax1.tick_params(axis='both', which='major', labelsize=10, direction='in', bottom=True) ax2.tick_params(axis='both', which='major', labelsize=10, direction='in') # ax1.xaxis.set_tick_params(which='both', labelbottom=True) # ax1.yaxis.set_tick_params(which='both', labelleft=True) for tick in ax1.get_xticklabels(): tick.set_fontproperties(en_font_prop) for tick in ax1.get_yticklabels(): tick.set_fontproperties(en_font_prop) for tick in ax2.get_xticklabels(): tick.set_fontproperties(en_font_prop) for tick in ax2.get_yticklabels(): tick.set_fontproperties(en_font_prop) ax1.legend(loc='upper right', fontsize=12, edgecolor='black', fancybox=False, framealpha=1, prop=font_prop) ax2.legend(loc='upper right', fontsize=12, edgecolor='black', fancybox=False, framealpha=1, prop=font_prop) plt.show()
上述的代码显示结果是:
下面我们开始对代码一段段分析。
一、多张子图的参数设置
1. 子图(subplots)
下面的代码就是先进行子图设置。
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 6))
第一个参数为2,表示子图行的排布方式,为2行
第二个参数为1,表示子图列的排布方式,为1列
figsize的参数为(10,6),表示最终图的总像素数为1000*600。也就是说第一个值为宽,第二个值为高,分别乘以100后,即为生成最终图的宽高。
除了上面描述的几种参数以外,还有下面的可选参数:
2. 子图y轴坐标说明(set_ylabel),子图x轴坐标说明(set_xlabel),设置子图标题(set_title)
与单一图像不同的是,有子图的情况下,我们对子图设置坐标名称和子图名称时调用的名字前面要加上set_
。
ax1.plot(x, y1, label=u'正弦曲线', color='blue') ax1.set_ylabel('正弦值', fontproperties=font_prop) ax1.set_xlabel('横轴', fontproperties=font_prop) ax1.set_title('正弦函数', fontproperties=font_prop)
可以设置的参数在下面的对应列表中,上面程序中的'正弦值','横轴'就是下面的参数label。
3. 图片总标题(suptitle)
设置图的总名称需要调用suptitle函数实现。suptitle是super title的缩写,其实就是总标题
plt.suptitle('函数', fontproperties=font_prop)
suptitle可以设置参数如下表所示,本例中‘函数’就是参数中的t。
4. 刻度参数设置(tick_parms)
ax1.tick_params(axis='both', which='major', labelsize=10, direction='in', bottom=True) ax2.tick_params(axis='both', which='major', labelsize=10, direction='in')
常见的使用到的参数如下表所示
把上面的tick_params中的参数修改下,添加下表中的一些参数,如下面所示
ax1.tick_params(axis='both', which='major', labelsize=10, direction='in', width=5, pad=10, top=True, left=False, right=True, labelcolor='green')
显示出的图就变了,我是随便加了些,内容反而显的杂乱了,其目的主要是为了测试。
5. 刻度标签的字体(get_xticklabels)(set_fontproperties)
关于刻度标签的很多参数,在tick_params中其实就可以设置了,比如说color,pad,labelsize,labelcolor。但唯独这个字体的格式的设置比较特殊,需要按下面的代码进行修改
for tick in ax1.get_xticklabels(): tick.set_fontproperties(en_font_prop) for tick in ax1.get_yticklabels(): tick.set_fontproperties(en_font_prop) for tick in ax2.get_xticklabels(): tick.set_fontproperties(en_font_prop) for tick in ax2.get_yticklabels(): tick.set_fontproperties(en_font_prop)
上面的代码实现的是对子图1和子图2的x轴刻度标签和y轴刻度标签的修改,总共要做四次,修改成新罗马体。
get_xticklabels 是 Matplotlib 中用于获取 x 轴刻度标签的方法。这个方法没有参数可以设置,它返回的是一个包含 Text
对象的列表,每个 Text
对象代表一个 x 轴刻度标签,可以通过调用 Text
对象的方法不仅可以用来设置刻度标签的字体,还可以设置刻度标签的属性,例如字体大小、颜色、旋转角度等,等于是通过for循环遍历来一个个设置刻度标签。
以下是一些常用的 Text 对象方法及其含义:
总结
本章节主要介绍了子图绘图中常见的几个参数的设置,与单一图所使用的函数是不同的,使用者需要注意。
到此这篇关于Python常见库matplotlib学习笔记之多个子图绘图的文章就介绍到这了,更多相关matplotlib多个子图绘图内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!