旋转 xticks 会导致刻度部分隐藏。

25

我正在创建一个图表,x轴上是名称,y轴上是时间值(分钟)。x轴上的名称类似于

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

其中y值为5,1,1等。我将xlabel设置为“类别”,将ylabel设置为“分钟数”。

由于xticks是某些长度的字符串,因此我决定将它们旋转90度以避免重叠。现在,刻度部分隐藏,xlabel已消失。

plot where xticks get partially hidden and xlabel disappears

有没有办法让整个图表适应所有内容..?

这是代码片段

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个回答

24
plt.tight_layout()

但一定要确保将此命令添加在plt.plot()plt.bar()


谢谢。工作完美! - Mukesh Chapagain

21

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

在您的具体情况下,您可能会发现使用figure.autofmt_xdate()很方便(它将旋转x轴标签等)。

或者,您可以执行plt.setp(plt.xticks()[1], rotation=30)(或其他各种执行相同操作的方法)。

此外,作为几年后的编辑,在最近版本的matplotlib中,您可以调用fig.tight_layout()来调整大小以适应标签位于图内,正如@elgehelge在下面所述。


非常感谢。当省略旋转值时,figure.autofmt_xdate会有所帮助。我刚刚接触Sandro Tosi的书,这将帮助我学到更多知识,我想。 - markjason72

9

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

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

最好和最短的解决方案!✨ - Shayan
当刻度标签很长时,plt.tight_layout() 会创建一个微小的图形,其中标签占据了大部分空间。相比之下,使用 bbox_inches='tight' 参数替代 plt.savefig() 可以保持和谐的图形大小。 - Paul Rougieux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接