旋转x轴刻度导致部分隐藏
我正在制作一个图表,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轴的标签也消失了。
有没有什么办法可以让整个图表都能显示出来呢……?
这里是代码片段:
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提到的那样。