【1】引言
学习了很多python画图教程之后,我们会发现:一些最基本的设置往往对图形的表达具有至关重要的影响。
因此,我们暂时回过头来,对一些基础知识进行加强。
今天,就一起学习如何对齐图名和标签。
【2】官网教程
点击下方链接,直达官网教程:
Aligning Labels and Titles — Matplotlib 3.9.2 documentation
官网教程给了一个两行两列的图形输出,对标签值进行了倾斜设置,相对于已经学过的教程显得别具一格,为此我进行了代码注释。
【3】代码解读
首先是引入画图和计算模块:
import matplotlib.pyplot as plt #引入画图模块 import numpy as np #引入计算模块
然后定义要画两行两列的图形:
fig, axs = plt.subplots(2, 2, layout='constrained') #定义要画图
在此基础上先输出第一行第一列的图形:
ax = axs[0][0] #定义第一行第一列的子图 ax.plot(np.arange(0, 1e6, 1000)) #输出第一行第一列的子图 ax.set_title('Title0 0') #设置图名 ax.set_ylabel('YLabel0 0') #设置Y轴
然后输出第一行第二列的图形:
ax = axs[0][1] #定义第一行第二列的子图 ax.plot(np.arange(1., 0., -0.1) * 2000., np.arange(1., 0., -0.1)) #输出第一行第二列的子图 ax.set_title('Title0 1') #设置图名 ax.xaxis.tick_top() #在子图的上侧显示标签 ax.tick_params(axis='x', rotation=55) #标注标签值,倾斜55度
在第一行第二列图像的输出设置中,有一个“rotation=55”,这段代码把输出值倾斜了55度。
在输出第二行的图形时,使用了for循环:
for i in range(2): #输出第二行图形ax = axs[1][i] #逐个输出图形ax.plot(np.arange(1., 0., -0.1) * 2000., np.arange(1., 0., -0.1)) #设置自变量和因变量ax.set_ylabel('YLabel1 %d' % i) #设置Y轴标签ax.set_xlabel('XLabel1 %d' % i) #设置X轴标签if i == 0:ax.tick_params(axis='x', rotation=55) #对左侧轴标签的输出倾斜55度
第二行的每个子图轴标签都倾斜了55度。
因为标签倾斜,所有会影响图名的位置,接下来使用fig.align()函数要求图名和标签对齐:
fig.align_titles() #对齐图名 fig.align_labels() # 'same as fig.align_xlabels(); fig.align_ylabels()'对齐标签plt.show() #输出图形
获得输出图形为:
图1
完整的带注释代码为:
python">import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块fig, axs = plt.subplots(2, 2, layout='constrained') #定义要画图ax = axs[0][0] #定义第一行第一列的子图
ax.plot(np.arange(0, 1e6, 1000)) #输出第一行第一列的子图
ax.set_title('Title0 0') #设置图名
ax.set_ylabel('YLabel0 0') #设置Y轴ax = axs[0][1] #定义第一行第二列的子图
ax.plot(np.arange(1., 0., -0.1) * 2000., np.arange(1., 0., -0.1)) #输出第一行第二列的子图
ax.set_title('Title0 1') #设置图名
ax.xaxis.tick_top() #在子图的上侧显示标签
ax.tick_params(axis='x', rotation=55) #标注标签值,倾斜55度for i in range(2): #输出第二行图形ax = axs[1][i] #逐个输出图形ax.plot(np.arange(1., 0., -0.1) * 2000., np.arange(1., 0., -0.1)) #设置自变量和因变量ax.set_ylabel('YLabel1 %d' % i) #设置Y轴标签ax.set_xlabel('XLabel1 %d' % i) #设置X轴标签if i == 0:ax.tick_params(axis='x', rotation=55) #对左侧轴标签的输出倾斜55度fig.align_labels() # 'same as fig.align_xlabels(); fig.align_ylabels()'对齐标签
fig.align_titles() #对齐图名plt.show() #输出图形
【4】代码修改
为扩大倾斜程度,删除下述代码:
if i == 0:
此时第二行的子图轴标签倾斜程度也跟随修改,使它们有不同的倾斜角度:
ax.tick_params(axis='x', rotation=30*(i+1)) #对左侧轴标签的输出倾斜55度
此时的输出图形为:
图2
至此的完整代码为:
python">import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块fig, axs = plt.subplots(2, 2, layout='constrained') #定义要画图ax = axs[0][0] #定义第一行第一列的子图
ax.plot(np.arange(0, 1e6, 1000)) #输出第一行第一列的子图
ax.set_title('Title0 0') #设置图名
ax.set_ylabel('YLabel0 0') #设置Y轴ax = axs[0][1] #定义第一行第二列的子图
ax.plot(np.arange(1., 0., -0.1) * 2000., np.arange(1., 0., -0.1)) #输出第一行第二列的子图
ax.set_title('Title0 1') #设置图名
ax.xaxis.tick_top() #在子图的上侧显示标签
ax.tick_params(axis='x', rotation=55) #标注标签值,倾斜55度for i in range(2): #输出第二行图形ax = axs[1][i] #逐个输出图形ax.plot(np.arange(1., 0., -0.1) * 2000., np.arange(1., 0., -0.1)) #设置自变量和因变量ax.set_ylabel('YLabel1 %d' % i) #设置Y轴标签ax.set_xlabel('XLabel1 %d' % i) #设置X轴标签ax.tick_params(axis='x', rotation=30*(i+1)) #设置轴标签的输出倾斜度fig.align_labels() # 'same as fig.align_xlabels(); fig.align_ylabels()'对齐标签
fig.align_titles() #对齐图名plt.show() #输出图形
【5】代码完善
为突出对比,给图形设置不同的颜色和线型:
图3
此时的完成代码为:
python">import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块fig, axs = plt.subplots(2, 2, layout='constrained') #定义要画图ax = axs[0][0] #定义第一行第一列的子图
ax.plot(np.arange(0, 1e6, 1000),'--',color='y')#输出第一行第一列的子图
ax.set_title('Title0 0') #设置图名
ax.set_ylabel('YLabel0 0') #设置Y轴ax = axs[0][1] #定义第一行第二列的子图
ax.plot(np.arange(1., 0., -0.1) * 2000., np.arange(1., 0., -0.1),'o--') #输出第一行第二列的子图
ax.set_title('Title0 1') #设置图名
ax.xaxis.tick_top() #在子图的上侧显示标签
ax.tick_params(axis='x', rotation=55) #标注标签值,倾斜55度for i in range(2): #输出第二行图形ax = axs[1][i] #逐个输出图形ax.plot(np.arange(1., 0., -0.1) * 2000., np.arange(1., 0., -0.1),color=(i,i*2/10,i*3/10)) #设置自变量和因变量ax.set_ylabel('YLabel1 %d' % i) #设置Y轴标签ax.set_xlabel('XLabel1 %d' % i) #设置X轴标签ax.tick_params(axis='x', rotation=30*(i+1)) #设置轴标签的输出倾斜度fig.align_labels() # 'same as fig.align_xlabels(); fig.align_ylabels()'对齐标签
fig.align_titles() #对齐图名plt.show() #输出图形
【6】总结
fig.align_titles() 可以对齐图名;
fig.align_labels() 可以对齐标签;
ax.tick_params(axis='x', rotation=??) 可以设置X轴的倾斜度。