geom_col中的颜色/填充条基于另一个变量?

问题描述 投票:1回答:1

我有未着色的geom_col,希望它通过在条形图中显示不同的阴影来显示有关another(连续)变量的信息。

示例

以geom_col开头

library(dplyr)
library(ggplot2)

set.seed(124)
iris[sample(1:150, 50), ] %>% 
  group_by(Species) %>% 
  summarise(n=n()) %>% 
  ggplot(aes(Species, n)) + 
  geom_col()

假设我们要根据每个分组中mean(Sepal.Width)的低/高对条进行着色

((注:我不知道是否有办法为ggplot提供'连续'的颜色,但是,如果没有,可以使用以下颜色)

library(RColorBrewer)
display.brewer.pal(n = 3, name= "PuBu")
brewer.pal(n = 3, name = "PuBu")
[1] "#ECE7F2" "#A6BDDB" "#2B8CBE"

最终结果应与上述相同geom_col,但条形图根据mean(Sepal.Width)的低/高而定。

注意

  • [This答案显示出类似的内容,但是非常手动,并且对于3个条形来说还可以,但是对于许多条形数量较多的地块来说是不可持续的(因为需要手动设置太多的case_when条件)
  • [This是相似的,但着色是基于图中已显示的变量,而不是另一个变量
  • 注意,在我上面提供的示例中,有3条,我提供3种颜色,这有点手工,如果有更好的(即较少手工)指定颜色的方法,我们将很高兴学习它

我尝试过的

我以为这可以用,但是似乎忽略了我提供的颜色

library(RColorBrewer)

# fill info from: https://stackoverflow.com/questions/38788357/change-bar-plot-colour-in-geom-bar-with-ggplot2-in-r
set.seed(124)
iris[sample(1:150, 50), ] %>% 
  group_by(Species) %>% 
  summarise(n=n(), sep_mean = mean(Sepal.Width)) %>% 
  arrange(desc(n)) %>% 
  mutate(colors = brewer.pal(n = 3, name = "PuBu")) %>% 
  ggplot(aes(Species, n, fill = colors)) + 
  geom_col()

r ggplot2 geom-bar geom-col
1个回答
0
投票

您可以尝试添加+ scale_fill_identity(guide="legend")以在图例中显示颜色,但是要在图例条目中使用方法是一个挑战。

iris[sample(1:150, 50), ] %>% 
  group_by(Species) %>% 
  summarise(n=n(), sep_mean = mean(Sepal.Width)) %>%
  arrange(desc(n)) %>% 
  mutate(colors = brewer.pal(n = 3, name = "PuBu")) %>%
  ggplot(aes(Species, n, fill = colors, label=round(sep_mean,2))) + 
  geom_col() +
  scale_fill_identity(guide="legend") +
  labs(fill="Sepal Width\n(mean cm)") +
  geom_text()

enter image description here从条形图的顶部到图例条目的标签是下一个挑战。

© www.soinside.com 2019 - 2024. All rights reserved.