繁体   English   中英

有没有办法在 python 中使用 sns.barplot 显示不同的颜色?

[英]Is there a way to show different colors using sns.barplot in python?

我正在寻找一个解决方案,我想为“1”组添加蓝色阴影(性别“男性”的浅蓝色为“女性”的深蓝色)和“2”组的红色阴影(性别“的浅红色”)男性'深红色代表性别'女性')有没有可能。 我也尝试过颜色托盘,但无法设置它。 我能得到一些帮助吗。 提前致谢。

    df = pd.DataFrame()
    df['percent'] = pd.Series([0.64, 0.36, 0.49, 0.51])
    df['gender'] = pd.Series(['M','F','M','F'])
    df['group'] =pd.Series([1,1,2,2])
    seaborn.barplot(x='group',y='percent',data=df, hue='gender')

在此处输入图片说明

所述ax通过返回sns.barplot将包含每个色调的条容器。 在每个容器内,每个组都会有一个栏。 为了确保 Seaborn 对 x 值使用相同的顺序,可以设置order=参数。 与通过性别的色调类似,可以固定hue_order

然后,您可以首先遍历容器,然后遍历各个条以更改它们的颜色。 如果超过 2 组,则应提供更多的阴影(0 表示非常亮,1 表示非常暗)。 同样,如果有更多色调,则可以使用更多颜色图。

由于图例不再适合更改后的数据,下面的代码将其删除。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

df = pd.DataFrame()
df['percent'] = pd.Series([0.64, 0.36, 0.49, 0.51])
df['gender'] = pd.Series(['M', 'F', 'M', 'F'])
df['group'] = pd.Series([1, 1, 2, 2])
groups = np.unique(df['group'])
genders = ['M', 'F']
ax = sns.barplot(x='group', y='percent', data=df, order=groups, hue='gender', hue_order=genders)
for bar_container, shade in zip(ax.containers, [0.5, 0.9]):
    for bar, group_cmap in zip(bar_container, ['Reds', 'Blues']):
        bar.set_color(plt.get_cmap(group_cmap)(shade))
ax.legend_.remove()
plt.show()

示例图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM