Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更改熊猫图中的X标签?_Python_Pandas_Matplotlib - Fatal编程技术网

Python 如何更改熊猫图中的X标签?

Python 如何更改熊猫图中的X标签?,python,pandas,matplotlib,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.x

我有一个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轴上的列标有它们的状态(活动/非活动),图例显示了列名(状态_1)。我希望这是相反的,并有X轴只显示“状态_1”和图例的颜色编码与两个选择“活动”和“非活动”

因为我是用价值计算来做这件事的,所以它变得非常混乱,并且被扭转了。有没有办法做到这一点

我希望这将有助于:

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

结果:

说明:

a、 apply(lambda x:x.value_counts())-根据数据创建计数值的数据帧

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

plot.bar()-只需打印您可以使用的数据帧,并将数据帧重塑为

或:


HTH

df1[['Status_1'、'Status_2'、'Status_3']]绘图(kind='bar')不只有在我有数字数据的情况下才有效吗?我能得到同一数据帧中每列的值计数吗?我的印象是
df[column].value_counts().to_frame()
一次只针对一列?您尝试过吗?是的,但它不起作用,因为它们不是数值,而是文本字符串,即“活动”或“非活动”。我需要将这些转化为计数,然后绘制图表。这很好!有没有办法将状态移动到图例或其他位置,而不是移动到X轴上每列的下方?一个状态标题“完成构造状态”有点长,在绘图中被截断。您可以旋转X标签,使其在plt.xticks中更可见(rotation=45),或者使整个图形水平-使用barh()代替bar(),或者您可以通过plt.xticks(范围(3),('asa','sab','cas'),rotation=45)重命名XLabel。希望这能有所帮助,我不知道你是否能制作标签图例。效果很好!最后一个问题是,有没有办法将标签添加到列的顶部以计算总计数?
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")
sns.factorplot(data=df2, x="variable", kind="count", col="value")