在堆积的Seaborn条形图中选择合适的颜色

埃勒518

我想使用Seaborn和这个MiltiIndex DataFrame创建一个堆积的条形图

header = pd.MultiIndex.from_product([['#'],
                                     ['TE', 'SS', 'M', 'MR']])
dat = ([[100, 20, 21, 35], [100, 12, 5, 15]])
df = pd.DataFrame(dat, index=['JC', 'TTo'], columns=header)
df = df.stack()
df = df.sort_values('#', ascending=False).sort_index(level=0, sort_remaining=False)

在此处输入图片说明

我用于绘图的代码是:

fontP = FontProperties()
fontP.set_size('medium')
colors = {'TE': 'green', 'SS': 'blue', 'M': 'yellow', 'MR': 'red'}
kwargs = {'alpha':0.5}

plt.figure(figsize=(12, 9))
sns.barplot(x=df2.index.get_level_values(0).unique(),
            y=df2.loc[pd.IndexSlice[:, df2.index[0]], '#'],
            color=colors[df2.index[0][1]], **kwargs)

sns.barplot(x=df2.index.get_level_values(0).unique(),
                          y=df2.loc[pd.IndexSlice[:, df2.index[1]], '#'],
                          color=colors[df2.index[1][1]], **kwargs)
sns.barplot(x=df2.index.get_level_values(0).unique(),
                          y=df2.loc[pd.IndexSlice[:, df2.index[2]], '#'],
                          color=colors[df2.index[2][1]], **kwargs)
bottom_plot = sns.barplot(x=df2.index.get_level_values(0).unique(),
                          y=df2.loc[pd.IndexSlice[:, df2.index[3]], '#'],
                          color=colors[df2.index[3][1]], **kwargs)

bar1 = plt.Rectangle((0, 0), 1, 1, fc='green', edgecolor="None")
bar2 = plt.Rectangle((0, 0), 0, 0, fc='yellow', edgecolor="None")
bar3 = plt.Rectangle((0, 0), 2, 2, fc='red', edgecolor="None")
bar4 = plt.Rectangle((0, 0), 3, 3, fc='blue', edgecolor="None")
l = plt.legend([bar1, bar2, bar3, bar4], [
    "TE", "M",
    'MR', 'SS'
],
               bbox_to_anchor=(0.95, 1),
               loc='upper left',
               prop=fontP)
l.draw_frame(False)

sns.despine()
bottom_plot.set_ylabel("#")

axes = plt.gca()
axes.yaxis.grid()

我得到:

在此处输入图片说明

我的问题是第二栏中的颜色顺序(“ TTo”),我希望根据1级索引值(['TE','SS','M','MR' ]),以便正确订购它们。如第一个条显示('JC)所示,则将具有最高颜色及其相应颜色的值再往下移,再将具有最高颜色及其颜色的下一个值放在下一个,依此类推,以此类推。

在Seaborn中,可能有比我正在使用的方法更简单的方法...

约翰·C

我不确定如何用seaborn创建这样的情节。这是一种通过遍历行并在每一步添加一个matplotlib条的方式来创建它的方法:

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

sns.set()
header = pd.MultiIndex.from_product([['#'],
                                     ['TE', 'SS', 'M', 'MR']])
dat = ([[100, 20, 21, 35], [100, 12, 5, 15]])
df = pd.DataFrame(dat, index=['JC', 'TTo'], columns=header)
df = df.stack()
df = df.sort_values('#', ascending=False).sort_index(level=0, sort_remaining=False)

colors = {'TE': 'green', 'SS': 'blue', 'M': 'yellow', 'MR': 'red'}

prev_index0 = None
for (index0, index1), quantity in df.itertuples():
    if index0 != prev_index0:
        bottom = 0
    plt.bar(index0, quantity, fc=colors[index1], ec='none', bottom=bottom, label=index1)
    bottom += quantity
    prev_index0 = index0
legend_handles = [plt.Rectangle((0, 0), 0, 0, color=colors[c], label=c) for c in colors]
plt.legend(handles=legend_handles)
plt.show()

结果图

要在不堆叠的情况下将条形图放回前端,可以简化代码:

colors = {'TE': 'forestgreen', 'SS': 'cornflowerblue', 'M': 'gold', 'MR': 'crimson'}

for (index0, index1), quantity in df.itertuples():
    plt.bar(index0, quantity, fc=colors[index1], ec='none', label=index1)
legend_handles = [plt.Rectangle((0, 0), 0, 0, color=colors[c], label=c, ec='black') for c in colors]
plt.legend(handles=legend_handles, bbox_to_anchor=(1.02, 1.02), loc='upper left')
plt.tight_layout()

非堆叠酒吧

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在堆积的Seaborn条形图中选择合适的颜色

来自分类Dev

条形图中的颜色

来自分类Dev

ggplot从堆积条形图中更改一个条形的颜色

来自分类Dev

将图例中的颜色顺序与堆积条形图中的颜色顺序对应起来

来自分类Dev

Seaborn中堆积的条形图

来自分类Dev

忽略堆积条形图中的空白

来自分类Dev

情节:如何在堆积的条形图中自定义颜色?

来自分类Dev

R ggplot更改堆积条形图中的一个变量的颜色

来自分类Dev

如何在堆积的条形图中设置系列的堆积顺序?

来自分类Dev

d3.js从条形图中选择一个条形

来自分类Dev

d3.js从条形图中选择一个条形

来自分类Dev

如何根据用户在Tableau中选择的日期来控制条形图中的条形数量

来自分类Dev

Seaborn条形图中的意外线

来自分类Dev

Seaborn条形图中的竖线代表什么?

来自分类Dev

希望将单个组件作为堆积条形图中的子集

来自分类Dev

jQuery迷你图-堆积条形图中的工具提示

来自分类Dev

希望将单个组件作为堆积条形图中的子集

来自分类Dev

将趋势线添加到堆积的条形图中

来自分类Dev

堆积的Flot条形图中间存在较大差距

来自分类Dev

隐藏分组堆积条形图中的空条 - chart.js

来自分类Dev

Spotfire - 在堆积条形图中显示最高值

来自分类Dev

如何从堆积条形图中删除未来日期

来自分类Dev

primefaces条形图中的不同颜色

来自分类Dev

更改堆叠条形图中的颜色

来自分类Dev

堆积条形图

来自分类Dev

堆积条形图

来自分类Dev

堆积条形图

来自分类Dev

熊猫堆积的条形图复制了大图例的颜色

来自分类Dev

更改特定变量R ggplot堆积条形图的颜色