首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggplot2:如何在参考线上和下面得到不同的色带

ggplot2:如何在参考线上和下面得到不同的色带
EN

Stack Overflow用户
提问于 2017-01-15 13:32:14
回答 1查看 1.1K关注 0票数 1

我有一个数据来生成一个geom_ribbon,然后在它上生成一个geom_line。现在,我想把红线上的丝带部分涂成不同的颜色。

地块的数据数据:

代码语言:javascript
复制
#simulate data
dat <- data.frame(1:12)
colnames(dat) <- c("code")
dat$code <- month.abb
dat$code <- factor(dat$code, levels = dat$code)
dat$Th <- c(42, 44, 53, 64, 75, 83, 87, 84, 78, 67, 55, 45)
dat$Tl <- c(27, 28, 35, 44, 54, 63, 68, 66, 59, 48, 38, 29)
dat$prec <- c(3.03, 2.48, 3.23, 3.15, 4.13, 3.23, 4.13, 4.88, 3.82, 3.07, 2.83, 2.8)
dat$prec <- dat$prec*16
dat

#plot
ggplot(data = dat, aes(x = code, ymin = Tl, ymax = Th)) +
  geom_ribbon(group = 1) +
  geom_line(data = dat, aes(x = code, y = prec, group = 2), colour = "red", size = 3) +
  expand_limits(y = 0)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-15 17:09:31

我们可以通过创建两条丝带来做到这一点,一条在Tlprec之间,另一条在precTh之间。在每种情况下,我们还需要分别处理prec低于或高于ThTl的情况。

代码语言:javascript
复制
ggplot(dat, aes(x = code)) +
  geom_ribbon(aes(ymin=pmin(pmax(prec,Tl),Th), ymax=Th, group=1), fill="blue") +
  geom_ribbon(aes(ymin=Tl, ymax=pmax(pmin(prec,Th),Tl), group=2), fill="green") +
  geom_line(aes(y = prec, group = 2), colour = "red", size = 3) +
  expand_limits(y = 0)

但请注意,由于数据的水平分辨率有限,该图并不完全正确:

因此,让我们创建一个新的数据框架,在每个月之间的几个点上线性地插值实际数据,然后再创建一个图:

代码语言:javascript
复制
dat.new = cbind.data.frame(
  code=seq(1,12,length=200), 
  sapply(dat[,c("prec","Th","Tl")], function(T) approxfun(dat$code, T)(seq(1,12,length=200)))
  )

ggplot(dat.new, aes(x = code)) +
  geom_ribbon(aes(ymin=pmin(pmax(prec,Tl),Th), ymax=Th, group=1), fill="blue") +
  geom_ribbon(aes(ymin=Tl, ymax=pmax(pmin(prec,Th),Tl), group=2), fill="green") +
  geom_line(aes(y = prec, group = 2), colour = "red", size = 3) +
  expand_limits(y = 0) +
  scale_x_continuous(breaks=1:12, labels=month.abb)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41661640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档