条形图和彩色分类变量

Posted

技术标签:

【中文标题】条形图和彩色分类变量【英文标题】:Bar plot and coloured categorical variable 【发布时间】:2020-03-17 13:28:28 【问题描述】:

我有一个包含 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', 'Result'])

我想要一个按 Period 列分组的条形图,显示 Observations 列中包含的所有值,并用 Result 列着色。 我该怎么做?

我尝试了 sns.barplot,但它只将观察列中的值加入到一个条中(值的平均值)。

sns.barplot(x='Period',y='Observations',hue='Result',data=df,ci=None)

Plot output

【问题讨论】:

您是否正在寻找汇总观察结果的堆积条形图?例如,请参阅以下内容:***.com/questions/23415500/… 【参考方案1】:

如果您希望它按月份分组,然后堆叠,请使用以下内容(注意我更新了您的代码以确保一个月有多个状态),但不确定我是否完全正确理解了您的问题:

%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)

【讨论】:

谢谢蒂姆,这几乎是我想要的,但奥斯巴克做到了。【参考方案2】:

假设您希望每一行都有一个栏,您可以执行以下操作:

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)

【讨论】:

这正是我想要的!非常感谢!

以上是关于条形图和彩色分类变量的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用两个分类变量创建双向表(Two Way Table两个分类变量的频率表)实战: 矩阵的双向表dataframe的双向表条形图和马赛克图来可视化频率表

R语言绘图——条形图/柱状图

R Shiny ggplot 条形图和折线图,具有动态变量选择和 y 轴为百分比

在R中的单个图上绘制两个变量的条形图和第三个变量的线图

相同颜色和线条的条形图和线图在条形图后面

使用echarts绘制条形图和扇形图