Python Matplotlib解决坐标轴标签重叠的三种方法

远山来客
远山来客
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍在Python Matplotlib绘制箱线图和子图时,解决坐标轴标签重叠的三种实用方法。包括通过添加换行符实现多行显示、设置rotation参数使标签倾斜,以及使用plt.tight_layout()自动调整布局。适用于长标签导致的视觉混乱问题,帮助提升图表可读性。

Matplotlib坐标轴标签重叠问题概述

在使用Matplotlib进行绘图时,经常遇到坐标轴标签过长导致重叠的问题。本文通过实际测试有效的几种解决方案进行展示,旨在帮助遇到类似问题的开发者。如图1所示,原始图表中出现了明显的标签重叠现象。

具体实现代码如下:


data1=[[0.3765,0.3765,0.3765,0.3765,0.3765],[0.3765,0.3765,0.3765,0.3765,0.3765],[0.3765,0.3765,0.3765,0.3765,0.3765],[0.3765,0.3765,0.3765,0.3765,0.3765]]
data2=[[0.2985,0.2268,0.2985,0.2996,0.2985],[0.2022,0.3203,0.3141,0.2926,0.2681],[0.2985,0.2668,0.2786,0.2985,0.2985],[0.2985,0.2985,0.2984,0.2978,0.2966]]
data3=[[0.7789,0.7698,0.6999,0.7789,0.7789],[0.7788,0.7758,0.7768,0.7698,0.8023],[0.7789,0.7781,0.7789,0.7789,0.7789],[0.7789,0.7782,0.7752,0.7852,0.7654]]
data4=[[0.6688,0.6688,0.6688,0.6981,0.6618],[0.6688,0.5644,0.5769,0.5858,0.5882],[0.6688,0.6688,0.6688,0.6688,0.6646],[0.6688,0.6646,0.6646,0.6688,0.6746]]  #date1-date4均为我用到的数据,数据的形式等可自行更换。
##将4个图画在一张图上
fig=plt.figure(figsize=(13,11))
ax1=fig.add_subplot(2, 2, 1)##左右布局
ax2=fig.add_subplot(2, 2, 2)
ax3=fig.add_subplot(2, 2, 3)##上下布局
ax4=fig.add_subplot(2, 2, 4)

plt.sca(ax1)   
labels=['Today is Sunday','Today is Monday','Today is Tuesday','Today is Wednesday']#标签
plt.boxplot(data1,labels=labels,boxprops={'linewidth':'2'},capprops={'linewidth':'2'},whiskerprops={'linewidth':'2'},medianprops={'linewidth':'2'}) #linewidth设置线条的粗细;boxprops、capprops、whiskerprops、medianprops表示盒图中各个线条的类型
plt.ylabel('Today',fontsize=16)
plt.xlabel('(a)',fontsize=16)

plt.sca(ax2)   
labels=['Today is Sunday','Today is Monday','Today is Tuesday','Today is Wednesday']
plt.boxplot(data2,labels=labels,boxprops={'linewidth':'2'},capprops={'linewidth':'2'},whiskerprops={'linewidth':'2'},medianprops={'linewidth':'2'})
plt.xlabel('(b)',fontsize=16)

plt.sca(ax3)   
labels=['Today is Sunday','Today is Monday','Today is Tuesday','Today is Wednesday']
plt.boxplot(data3,labels=labels,boxprops={'linewidth':'2'},capprops={'linewidth':'2'},whiskerprops={'linewidth':'2'},medianprops={'linewidth':'2'})
plt.ylabel('Today',fontsize=16)
plt.xlabel('(c)',fontsize=16)

plt.sca(ax4)   
labels=['Today is Sunday','Today is Monday','Today is Tuesday','Today is Wednesday']
plt.boxplot(data4,labels=labels,boxprops={'linewidth':'2'},capprops={'linewidth':'2'},whiskerprops={'linewidth':'2'},medianprops={'linewidth':'2'})
plt.xlabel('(d)',fontsize=16)
plt.show()

方法一:标签多行显示

第一种解决方法:将轴标签分为多行显示,效果如图2所示。

只需在原有的子图绘制代码中,对需要换行的标签进行处理,添加如下代码片段:


ax1.set_xticklabels(['Today is Sunday','\n'+'Today is Monday','Today is Tuesday','\n'+'Today is Wednesday'],fontsize=16) 

字符串中的'\n'表示换行符。若希望某个标签换行显示,只需在该标签前添加此符号即可。支持多行显示,每增加一个'\n'即增加一行,例如'\n\n'表示换两行。同时,可通过fontsize参数调整标签字体大小。

方法二:标签倾斜显示

第二种解决方法:使轴标签倾斜显示。

同样,在原有代码基础上增加一行设置即可实现:


ax1.set_xticklabels(['Today is Sunday','Today is Monday','Today is Tuesday','Today is Wednesday'],fontsize=16,rotation=10)

rotation参数用于指定倾斜角度,例如设置为10表示倾斜10度,该值可根据需要自由调整。此方法也可与上述换行显示结合使用,以达到最佳视觉效果。

方法三:自动布局调整

第三种解决方法:利用Matplotlib内置的自动调整功能。

只需在绘图部分的末尾添加Matplotlib的自动调整语句,图表标签大小及布局将自动优化,如图3所示:


plt.tight_layout()

以上介绍了Python Matplotlib在绘制箱线图和子图时解决坐标轴标签重叠的三种方法,希望对大家有所帮助。如需更多技术支持,请持续关注本站更新。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表