我不知道如何在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')

当前回答

如果您想在axis对象上应用旋转,最简单的方法是使用tick_params。为例。

ax.tick_params(axis='x', labelrotation=90)

这里有Matplotlib文档参考。

当你有一个由plt返回的轴数组时,这很有用。子图,它比使用set_xticks更方便,因为在这种情况下,您还需要设置tick标签,而且比那些迭代tick标签更方便(原因很明显)。

其他回答

最简单的解决方法是:

plt.xticks(rotation=XX)

但也

# Tweak spacing to prevent clipping of tick-labels
plt.subplots_adjust(bottom=X.XX)

例如,对于日期,我使用旋转=45和底部=0.20,但你可以对你的数据做一些测试

这取决于你画的是什么。

import matplotlib.pyplot as plt

 x=['long_text_for_a_label_a',
    'long_text_for_a_label_b',
    'long_text_for_a_label_c']
y=[1,2,3]
myplot = plt.plot(x,y)
for item in myplot.axes.get_xticklabels():
    item.set_rotation(90)

对于pandas和seaborn,给你一个Axes对象:

df = pd.DataFrame(x,y)
#pandas
myplot = df.plot.bar()
#seaborn 
myplotsns =sns.barplot(y='0',  x=df.index, data=df)
# you can get xticklabels without .axes cause the object are already a 
# isntance of it
for item in myplot.get_xticklabels():
    item.set_rotation(90)

如果你需要旋转标签,你可能也需要改变字体大小,你可以使用font_scale=1.0来做到这一点。

如果使用plt:

plt.xticks(rotation=90)

如果使用熊猫或海产动物进行绘图,则以斧头为绘图轴:

ax.set_xticklabels(ax.get_xticklabels(), rotation=90)

做上述事情的另一种方式:

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

简单的方法

如本文所述,matplotlib中有一个现有方法。Pyplot图形类,它自动为您的图形适当地旋转日期。

你可以在绘制数据之后调用它(i.e.x x.plot(dates,ydata):

fig.autofmt_xdate()

如果您需要进一步格式化标签,请签出上面的链接。

Non-datetime对象

根据languitar的评论,我为非datetime xtick建议的方法在缩放时不能正确更新等等。如果它不是用作x轴数据的datetime对象,您应该遵循Tommy的回答:

for tick in ax.get_xticklabels():
    tick.set_rotation(45)
import pylab as pl
pl.xticks(rotation = 90)