旋转xticks会导致在matplotlib中部分隐藏的刻度

mar*_*n72 13 python label matplotlib rotation

我正在创建一个在x轴上具有名称和在y轴上具有时间值(分钟)的图.x轴上的名称是相似的

 ['cooking']18:15:27 ,['study']18:09:19,['travel']18:21:34` etc ..
Run Code Online (Sandbox Code Playgroud)

其中y值为5,1,1等.我将xlabel作为"类别",ylabel作为"持续时间以分钟为单位".

由于xticks是一些长度的字符串,我决定将它们旋转90以避免重叠.现在,蜱被部分隐藏,xlabel已经消失. 绘图xticks部分隐藏,xlabel消失 有什么方法可以让整个情节适应一切......?

谢谢

标记

这是代码片段

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")
Run Code Online (Sandbox Code Playgroud)

Joe*_*ton 18

一个好的选择是旋转刻度标签.

在您的特定情况下,您可能会发现使用它很方便figure.autofmt_xdate()(这会将x轴标签旋转到其他位置).

或者,您可以plt.setp(plt.xticks()[1], rotation=30) (或其他各种方式做同样的事情).

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


elg*_*lge 16

plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)

但请务必 plt.plot()之后添加此命令plt.bar()


Ada*_*all 5

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

figure.savefig('myplot.png', bbox_inches='tight')
Run Code Online (Sandbox Code Playgroud)