如何在Pandas Plot中更改X标签?

时间:2017-07-03 14:16:11

标签: python pandas matplotlib

我有一个包含特定状态列的Excel工作表,我需要计算每个状态,然后我需要在条形图中绘制它。例如:

Status_1    Status_2    Status_3
Active      Abandoned   Active
Inactive    Abandoned   Active

目前我一直在使用以下代码:

import pandas as pd, matplotlib.pyplot as plt
report = r"\\Myserver\Reports\Report.xlsx"
df1 = pd.read_excel(report, sheetname=1)
df = df1[['Status_1', 'Status_2', 'Status_3']].copy()

val1 = df['Status_2'].value_counts().to_frame()
vals1 = pd.DataFrame(val1)
fig, axes = plt.subplots(nrows=2, ncols=2)
vals1.plot(kind='bar', ax=axes[0,0])

所以现在我的问题是图表显示正确,但X轴上的列标有其状态(活动/非活动),图例显示列名称(Status_1)。我希望将其颠倒过来,让X轴显示“Status_1”,并使用两种“Active”和“Inactive”选项对图例进行颜色编码。

因为我正在以价值计数这样做,所以它变得非常困惑并且转过身来。有没有办法做到这一点?

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以使用seaborn,同时将数据框重塑为tidy form

import seaborn as sns
import pandas as pd

In [26]: df
Out[26]: 
    Status_1   Status_2   Status_3
0     Active  Abandoned     Active
1   Inactive  Abandoned  Abandoned
2     Active  Abandoned     Active
3   Inactive   Inactive     Active
4     Active  Abandoned   Inactive
5  Abandoned  Abandoned     Active

In [27]: df2 = pd.melt(df) # convert into tidy data
In [28]: df2
Out[28]: 
    variable      value
0   Status_1     Active
1   Status_1   Inactive
2   Status_1     Active
3   Status_1   Inactive
4   Status_1     Active
[...]
15  Status_3     Active
16  Status_3   Inactive
17  Status_3     Active
In [29]: sns.factorplot(data=df2, x="variable", kind="count", hue="value")

factorplot

或者:

sns.factorplot(data=df2, x="variable", kind="count", col="value")

factoroplot

HTH

答案 1 :(得分:1)

我希望这会有所帮助:

a = pd.DataFrame([['a','i'],['a','i'],['i','a']], columns=["S1", "S2"])
a.apply(lambda x: x.value_counts()).transpose().plot.bar()

a looks like this

结果:

enter image description here

说明:

a.apply(lambda x:x.value_counts()) - 从数据中创建计数值的数据框,

.transpose() - 转置索引和列(如果您想要返回Status1,Status2作为条形,Active / Inactive作为x-label,则只需删除此方法,

plot.bar() - 只是绘制你的DataFrame