我有未着色的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)
的低/高而定。
case_when
条件)我以为这可以用,但是似乎忽略了我提供的颜色
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()
您可以尝试添加+ 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()