我正在使用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轴刻度标签垂直方向,因此无法读取文本。我外面的传说也被切断了。
我可以将刻度标签的方向更改为水平,然后调整整个图形以使图例可见吗?
答案 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')
得到结果图:
或者你也可以致电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')