r - 按颜色分割 ggplot 功能区或线条
问题描述
我正在尝试绘制一条丝带,沿着该丝带通过分组因素(例如,使用不同的颜色或 alpha)突出显示某些感兴趣的区域。
以下是一些虚构的数据:
myYears=1980:2009
randDF <- data.frame(Year=myYears,
lowerQ=rnorm(myYears),
upperQ=2+rnorm(myYears),
mygroup=c(rep(1,10),rep(2,10),rep(1,10)))
第一个选项 - 用不同的颜色分割功能区 - 不起作用
ggplot(randDF)+
geom_ribbon(aes(x=Year,ymin=lowerQ,ymax=upperQ,fill=mygroup))
第二个选项 - 用不同的颜色绘制丝带的边缘 - 这画了一些东西但它不正确(见下图)
ggplot(randDF)+
geom_ribbon(aes(x=Year,ymin=lowerQ,ymax=upperQ),fill="grey")+
geom_line(aes(x=Year,y=upperQ,colour=factor(mygroup)))+
geom_line(aes(x=Year,y=lowerQ,colour=factor(mygroup)))
解决方案
一种选择可能是创建三个组并将第 1 组和第 3 组的线涂成相同的颜色:
myYears=1980:2009
randDF <- data.frame(Year=myYears,
lowerQ=rnorm(myYears),
upperQ=2+rnorm(myYears),
mygroup=c(rep(1,10),rep(2,10),rep(3,10)))
ggplot(randDF)+
geom_ribbon(aes(x=Year,ymin=lowerQ,ymax=upperQ,fill=mygroup))
ggplot(randDF)+
geom_ribbon(aes(x=Year,ymin=lowerQ,ymax=upperQ),fill="grey")+
geom_line(aes(x=Year,y=upperQ,colour=factor(mygroup)), size = 2)+
geom_line(aes(x=Year,y=lowerQ,colour=factor(mygroup)), size = 2) +
scale_colour_manual(values = c("darkred", "darkgreen", "darkred"))
组之间的差距仍然存在一个小问题 - 解决方法可能是复制每个组的最后一个值。
推荐阅读
- android - 跟踪多个请求代码
- sql - MSSQL 排列/组合 - 使用数据子集查找所有可能的匹配项
- java - 拒绝对先前失败的类 java.lang.Class 重新初始化
- ansible - ansible - json_query 将布尔值与外部变量进行比较
- r - R - 使用 GoogleSignIn 和 ObserveEvent
- git - 有没有办法将 gitignore 忽略的文件仅上传到特定的仓库?
- python-3.x - 如何在 scipy.optimize.differential_evolution 中启用并行?
- c++ - 在 c++ libgcrypt 上从 nodejs 解密消息
- r - 根据单列中的唯一值和非唯一值创建表
- c# - Identityserver4/oidc 将登录发送到错误的域名