8

我通过在 Python 中使用 pandas 从 CSV 读取数据来绘制条形图。我将 CSV 读入 aDataFrame并使用 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 轴刻度标签是垂直定向的,因此我无法阅读文本。我在外面的传说也被切断了。

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

在此处输入图像描述

4

3 回答 3

10

设置标签时尝试使用“旋转”关键字。例如:

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

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

plt.xticks(rotation=90)

至于图例的定位等,大概还是值得看一下tight layout guide

于 2013-08-07T08:45:36.257 回答
5

对于标签的旋转,您可以简单地告诉 pandas 通过给参数提供度数来为您旋转它rot。被切断的传说也在其他地方得到了回答,比如这里

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')
于 2016-09-21T13:42:11.953 回答
4

您应该使用matplotlibAPI 并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')

在此处输入图像描述

于 2013-08-14T17:59:16.310 回答