如何在geom_ribbon中正确指定数据列作为填充颜色?
解决geom_ribbon无法用数据列设置填充色的问题
你的错误核心是没有把fill的列映射放到aes()函数内部:当你直接写fill=grouping时,ggplot会把grouping当成一个具体的颜色名称(比如"red"这种),而不是识别为数据框里的列,所以才会报"Unknown colour name: grouping"的错误。只有把fill参数放到aes()里,ggplot才会将其作为数据列进行分组映射。
修正后的代码
library(ggplot2) time <- as.factor(c('A','B','C','D')) grouping <- as.factor(c('GROUP1','GROUP1','GROUP1','GROUP1', 'GROUP2','GROUP2','GROUP2','GROUP2')) x <- c(1.00,1.03,1.03,1.06,0.5,0.43,0.2,0.1) x.upper <- x+0.05 x.lower <- x-0.05 df <- data.frame(time, x, x.upper, x.lower,grouping) ggplot(data = df,aes(as.numeric(time),x,color=grouping)) + # 把fill=grouping移到aes内部,同时省略重复的data和x(自动继承顶层映射) geom_ribbon(aes(ymax=x.upper, ymin=x.lower, fill=grouping), alpha=.5) + geom_point() + labs(title="My ribbon plot",x="Time",y="Value") + scale_x_continuous(breaks = 1:4, labels = levels(df$time))
额外说明
- 顶层
ggplot()已经指定了数据源和x轴映射,geom_ribbon会自动继承,不需要重复写data=df和x=as.numeric(time),代码更简洁。 - 当你在
aes()里指定color=grouping或fill=grouping时,ggplot会自动处理分组逻辑,所以顶层的group=grouping可以省略,不影响结果。
内容的提问来源于stack exchange,提问作者brucezepplin
相关产品推荐
相关产品推荐

