在python matplotlib中旋转轴文本

我无法弄清楚如何旋转X轴上的文字。 它是一个时间戳,随着样本数量的增加,它们越来越近,直到它们重叠。 我想旋转文本90度,以便样本靠得更近,它们不重叠。

下面是我的,它工作正常,除了我不知道如何旋转X轴文本。

import sys import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import datetime font = {'family' : 'normal', 'weight' : 'bold', 'size' : 8} matplotlib.rc('font', **font) values = open('stats.csv', 'r').readlines() time = [datetime.datetime.fromtimestamp(float(i.split(',')[0].strip())) for i in values[1:]] delay = [float(i.split(',')[1].strip()) for i in values[1:]] plt.plot(time, delay) plt.grid(b='on') plt.savefig('test.png') 

简单的方法

如此处所述 , matplotlib.pyplot figure类中存在一个现有的方法,可以自动为您的date自动旋转date。

你可以调用它后,你绘制你的数据(即ax.plot(dates,ydata)

 fig.autofmt_xdate() 

如果您需要进一步格式化标签,请检查以上链接。

非date时间的对象

根据languitar的评论,我提出的非datetime xticks的方法在缩放等时不会正确更新。如果它不是一个用作x轴数据的datetime对象,你应该遵循Tommy的回答 :

 for tick in ax.get_xticklabels(): tick.set_rotation(45) 

这适用于我:

 plt.xticks(rotation=90) 

尝试pyplot.setp。 我想你可以做这样的事情:

 x = range(len(time)) plt.xticks(x, time) locs, labels = plt.xticks() plt.setp(labels, rotation=90) plt.plot(x, delay) 

我想出了一个类似的例子。 再次,旋转关键字是..好吧,这是关键。

 from pylab import * fig = figure() ax = fig.add_subplot(111) ax.bar( [0,1,2], [1,3,5] ) ax.set_xticks( [ 0.5, 1.5, 2.5 ] ) ax.set_xticklabels( ['tom','dick','harry'], rotation=45 ) ; 

我的答案受cjohnson318的回答启发,但我不想提供硬编码的标签列表; 我想旋转现有的标签:

 for tick in ax.get_xticklabels(): tick.set_rotation(45) 

公寓从

 plt.xticks(rotation=90) 

这也是可能的:

 plt.xticks(rotation='vertical') 
 import pylab as pl pl.xticks(rotation = 90)