ggplot2: geom_ribbon颜色填充


1 数据

# Generate data (level2 == level1) 
huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron), level2 = as.vector(LakeHuron)) 

# Change Level2 
huron[1:50,2] <- huron[1:50,2]+100 
huron[50:90,2] <- huron[50:90,2]-100 

2 填充方法

2.1 原始版本

library(ggplot2) 

h <- ggplot(huron, aes(year))

h + 
    geom_ribbon(aes(ymin = level, ymax = level2, fill = level > level2)) + 
    geom_line(aes(y = level)) + geom_line(aes(y=level2)) + 
    scale_fill_manual(values=c("red", "green"), name="fill") 

问题在于颜色填充中有未被填充的区域,下面进行改进

2.2 改进版本一

huron <- rbind(huron, huron[huron$year == 1924,]) 
huron <- huron[order(huron$year),] 

huron$id <- 1:nrow(huron) 
huron$group <- ifelse(huron$id <= 50, "A", "B") 

h <- ggplot(huron, aes(year)) 
h + 
    geom_ribbon(aes(ymin = level, ymax = level2, fill = group)) + 
    geom_line(aes(y = level)) + geom_line(aes(y = level2)) 

2.3 改进版本二

h <- ggplot() + 
    geom_ribbon(data = huron[huron$level >= huron$level2, ], aes(x = year, ymin = level, ymax = level2), fill="green") + 
    geom_ribbon(data = huron[huron$level <= huron$level2, ], aes(x = year, ymin = level, ymax = level2), fill="red") + 
    geom_line(data = huron, aes(x = year, y = level)) + 
    geom_line(data = huron, aes(x = year, y = level2)) 
h 

查看方法原地址


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM