旋转x轴刻度导致部分隐藏

25 投票
3 回答
21788 浏览
提问于 2025-04-16 21:35

我正在制作一个图表,x轴上是名字,y轴上是时间值(以分钟为单位)。x轴上的名字像这样:

['cooking']18:15:27 ,['study']18:09:19,['travel']18:21:34` etc ..

而y轴的值是5、1、1等等。我把x轴的标签设置为“类别”,y轴的标签设置为“持续时间(分钟)”。

因为x轴的刻度标签是一些长度不一的字符串,所以我决定把它们旋转90度,以避免重叠。可是现在,刻度标签部分被遮住了,x轴的标签也消失了。

图表,x轴刻度部分被遮住,x轴标签消失

有没有什么办法可以让整个图表都能显示出来呢……?

这里是代码片段:

import matplotlib.pyplot as plt

figure = plt.figure()
barwidth = 0.25
ystep = 10
plt.grid(True)
plt.xlabel('categories')
plt.ylabel('durations in  minutes')
plt.title('durations for categories-created at :'+now)
plt.bar(xdata, ydata, width=barwidth,align='center')
plt.xticks(xdata,catnames,rotation=90)
plt.yticks(range(0,maxduration+ystep,ystep))
plt.xlim([min(xdata) - 0.5, max(xdata) + 0.5])
plt.ylim(0,max(ydata)+ystep)
figure.savefig("myplot.png",format="png")

3 个回答

9

在保存的时候设置边界框,也会显示标签:

figure.savefig('myplot.png', bbox_inches='tight')
24
plt.tight_layout()

但是一定要在 plt.plot()plt.bar() 之后加上这个命令。

21

一个不错的选择是旋转刻度标签。

在你的具体情况下,你可以使用 figure.autofmt_xdate() 这个方法(它会旋转x轴的标签,还有其他一些功能)。

另外,你也可以用 plt.setp(plt.xticks()[1], rotation=30) 来实现同样的效果(或者用其他几种方法也可以做到)。

此外,经过几年的更新,现在的matplotlib版本中,你可以使用 fig.tight_layout() 来调整图形的大小,以便把标签放得下,正如下面@elgehelge提到的那样。

撰写回答