[英]Python .sum() is giving me a different result to plt.bar() and sns.barplot(), which is correct?
[英]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.