Python 条形图与彩色分类变量
我有一个包含3个变量的数据帧:Python 条形图与彩色分类变量,python,plot,colors,bar-chart,categorical-data,Python,Plot,Colors,Bar Chart,Categorical Data,我有一个包含3个变量的数据帧: data= [["2019/oct",10,"Approved"],["2019/oct",20,"Approved"],["2019/oct",30,"Approved"],["2019/oct",40,"Approved"],["2019/nov",20,"Under evaluation"],["2019/dec",30,"Aproved"]] df = pd.DataFrame(data, columns=['Period', 'Observations
data= [["2019/oct",10,"Approved"],["2019/oct",20,"Approved"],["2019/oct",30,"Approved"],["2019/oct",40,"Approved"],["2019/nov",20,"Under evaluation"],["2019/dec",30,"Aproved"]]
df = pd.DataFrame(data, columns=['Period', 'Observations', 'Result'])
我想要一个按句点列分组的条形图,显示所有值包含在“观察”列中,并与“结果”列一起着色。
我该怎么做
我尝试了sns.barplot,但它只在一个条中加入了“观察”列中的值(值的平均值)
假设您希望每行有一个条形图,可以执行以下操作:
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
result_cat = df["Result"].astype("category")
result_codes = result_cat.cat.codes.values
cmap = plt.cm.Dark2(range(df["Result"].unique().shape[0]))
patches = []
for code in result_cat.cat.codes.unique():
cat = result_cat.cat.categories[code]
patches.append(mpatches.Patch(color=cmap[code], label=cat))
df.plot.bar(x='Period',
y='Observations',
color=cmap[result_codes],
legend=False)
plt.ylabel("Observations")
plt.legend(handles=patches)
如果您希望按月份分组,然后堆叠,请使用以下命令(注意,我更新了您的代码以确保一个月具有多个状态),但不确定我是否完全正确理解了您的问题:
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
data= [["2019/oct",10,"Approved"],["2019/oct",20,"Approved"],["2019/oct",30,"Approved"],["2019/oct",40,"Under evaluation"],["2019/nov",20,"Under evaluation"],["2019/dec",30,"Aproved"]]
df = pd.DataFrame(data, columns=['Period', 'Observations', 'Result'])
df.groupby(['Period', 'Result'])['Observations'].sum().unstack('Result').plot(kind='bar', stacked=True)
您是否在寻找一个包含观察结果汇总的堆叠条形图?例如,请看以下内容:谢谢Tim,这几乎是我想要的,但Osbark得到了。这正是我想要的!非常感谢你!
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
data= [["2019/oct",10,"Approved"],["2019/oct",20,"Approved"],["2019/oct",30,"Approved"],["2019/oct",40,"Under evaluation"],["2019/nov",20,"Under evaluation"],["2019/dec",30,"Aproved"]]
df = pd.DataFrame(data, columns=['Period', 'Observations', 'Result'])
df.groupby(['Period', 'Result'])['Observations'].sum().unstack('Result').plot(kind='bar', stacked=True)