在 plotnine 中更改 geom_bar 每个条的颜色

Changing color of each bar for geom_bar in plotnine

我正在为单个变量(基于调查回复)绘制一些条形图,绘制九个计数。

我目前正在使用此代码:

(ggplot(df, aes ('age_cat3')) +
geom_bar(color='#F6F6F6', fill='#0C475B') +
theme_minimal() +
xlab("") +
ggtitle('Age distribution in total sample'))

这会产生:

我希望每个条形都有不同的颜色。我知道我可以通过添加 [fill= "age_cat3"] 来做到这一点,所以:

(ggplot(df, aes ('age_cat3', fill='age_cat3')) +
geom_bar() +
theme_minimal() +
xlab("") +
ggtitle('Age distribution in total sample'))

这会产生:

这个解决方案有两个问题:

  1. 现在有一个图例,我似乎无法用“scale_color_discrete(guide=False)”删除它

  2. 我似乎无法控制颜色或颜色主题。

任何关于删除图例的建议都会很棒,但理想情况下,无需使用“填充”即可更改条形颜色的方法会很棒。

(另外,抱歉,图片太大了。我不太确定如何附加小图片)

可重现的数据:

df = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6, 7, 8 , 9, 10],
                   'age_cat3': [15-24, 15-24, 25-34, 35-44, 35-44, 35-44, 35-44, 45-59, 45-59, 60+]}

您可以使用 geom/layer 参数 show_legend=False 关闭图例,您可以使用手动比例设置 fill 颜色。

(ggplot(...)
...
+ geom_bar(show_legend=False)
+ scale_fill_manual(values=['red', 'blue', 'green', 'cyan', 'violet', '#AABBCC'])
)

另一个删除图例的选项是:

(ggplot(...)
...
+ theme(legend_position = element_blank())

或者放在其他位置:

(ggplot(...)
...
+ theme(legend_position = 'top')

scale_fill_manual 是最好的,也许是唯一手动包含颜色值的方法。