如何使用ggplot设置条形图填充色,为指定类别单独设置高亮颜色
你直接在aes()中传入颜色字符串不生效的原因是:ggplot的美学映射默认会把传入的变量值作为分类标签,自动匹配系统默认配色,不会直接将字符串识别为渲染用的颜色,需要额外配置颜色映射规则,两种常见实现场景如下:
手动指定要单独设色的类别
如果已经明确要把类别"1"设为红色,其余设为蓝色,可以用以下两种写法:
写法1:逻辑分组映射(方便自定义图例)
library(ggplot2) df <- data.frame(a=c("1","1","2","3","4","5")) ggplot(df,aes(x = a, fill = a == "1")) + geom_bar() + # 逻辑值TRUE对应目标类别的颜色,FALSE对应其余类别的颜色 scale_fill_manual(values = c("TRUE" = "red", "FALSE" = "blue"), name = "分组") # 不需要图例可添加参数 guide = "none"
写法2:直接使用自定义颜色值
如果要直接复用ifelse中定义的颜色名称渲染,添加scale_fill_identity()即可:
ggplot(df,aes(x=a,fill=ifelse(a=="1","red","blue")))+ geom_bar() + scale_fill_identity()
自动识别最高值类别单独设色
不需要手动写死类别名称,自动统计频次最高的类别做特殊配色:
library(ggplot2) library(dplyr) df <- data.frame(a=c("1","1","2","3","4","5")) # 计算频次最高的类别,有并列最高时默认取第一个 top_cat <- df %>% count(a) %>% filter(n == max(n)) %>% pull(a) %>% .[1] ggplot(df,aes(x = a, fill = a == top_cat)) + geom_bar() + scale_fill_manual(values = c("TRUE" = "red", "FALSE" = "blue"), guide = "none")
内容的提问来源于stack exchange,提问作者zeizeiv9
相关产品推荐
相关产品推荐

