如何为分面分组的ggplot条形图按block取值设置不同填充颜色
解决方案
你需要将block变量映射到fill美学参数上,同时保持占比计算的分组逻辑不受填充映射的干扰,修改后的完整代码如下:
library(ggplot2) library(scales) ggplot(npk,aes(x=block, fill = factor(block))) + geom_bar(aes(y = after_stat(prop), group = N), position = "identity") + facet_grid(~ N) + xlab("blocks") + scale_y_continuous(labels = percent) + theme(axis.text.x=element_blank(),axis.ticks.x=element_blank(), legend.title=element_blank())
修改说明
- 将
fill = factor(block)加入全局美学映射,把分类的区块编号映射为条形填充色,即可自动为不同block分配不同颜色 - 将
group=N移到geom_bar的美学映射中,搭配after_stat(prop)(新版本ggplot2推荐的统计值写法,等价于旧写法..prop..),明确占比计算的分组依据是变量N,不会因为新增fill映射改变原有占比统计逻辑 - 新增
position = "identity"参数,避免填充映射触发默认的条形堆叠行为,保持原有单条形的展示效果
如果需要自定义每个区块的对应颜色,可以额外添加scale_fill_manual(values = c("1"="颜色1", "2"="颜色2", ...))自行指定配色。
内容的提问来源于stack exchange,提问作者Martina
相关产品推荐
相关产品推荐

