更改标记的ticklabel方向和图例位置

时间:2013-08-07 08:12:05

标签: python matplotlib pandas

我正在使用Python中的pandas从CSV读取数据来绘制条形图。我将CSV读入DataFrame并使用matplotlib绘制它们。

以下是我的CSV的样子:

SegmentName    Sample1   Sample2   Sample3

Loop1          100       100       100

Loop2          100       100       100

res = DataFrame(pd.read_csv("results.csv", index_col="SegmentName"))

我绘制并将图例设置为外部。

plt.figure()
ax = res.plot(kind='bar')
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

plt.savefig("results.jpg")

但是,x轴刻度标签垂直方向,因此无法读取文本。我外面的传说也被切断了。

我可以将刻度标签的方向更改为水平,然后调整整个图形以使图例可见吗?

enter image description here

3 个答案:

答案 0 :(得分:8)

设置标签时,请尝试使用'rotation'关键字。 E.g:

plt.xlabel('hi',rotation=90)

或者,如果您需要旋转刻度标签,请尝试:

plt.xticks(rotation=90)

至于传奇等的定位,可能值得一看tight layout guide

答案 1 :(得分:5)

对于标签的旋转,您可以通过给出rot参数的度数来告诉pandas为您旋转它。 被切断的传说也会在其他地方得到解答,例如here

df = pd.DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6])],
                              orient='index', columns=['one', 'two', 'three'])
ax = df.plot(kind='bar', rot=90)
lgd = ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))
fig.savefig("results.jpg", bbox_extra_artists=(lgd,), bbox_inches='tight')

答案 2 :(得分:4)

您应该使用matplotlib API并像这样调用ax.set_xticklabels(res.index, rotation=0)

index = Index(['loop1', 'loop2'], name='segment_name')
data = [[100] * 3, [100] * 3]
columns = ['sample1', 'sample2', 'sample3']
df = DataFrame(data, index=index, columns=columns)

fig, ax = subplots()
df.plot(ax=ax, kind='bar', legend=False)
ax.set_xticklabels(df.index, rotation=0)
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))
fig.savefig('results.png', bbox_inches='tight')

得到结果图:

enter image description here

或者你也可以致电fig.autofmt_xdate()寻求一个很好的倾斜效果,当然你可以修改上面的(更一般的)ax.set_xticklabels()

fig, ax = subplots()
df.plot(ax=ax, kind='bar', legend=False)
fig.autofmt_xdate()
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))
fig.savefig('results-tilted.png', bbox_inches='tight')

enter image description here