如何使用ggplot绘制一条线周围的阴影区域

时间:2012-11-19 23:37:09

标签: r ggplot2

我希望使用ggplot绘制一条线周围的阴影区域。这两个数据集没有直接关系,我正在做两者之间的比较。基本上,我希望绘制下面代码产生的输出,以及在变量'lower_region_values'和'upper_region_values'中输入的具有最小和最大y轴值的阴影区域。

请帮我解决这个问题。

可重复的代码从这里开始

library("ggplot2")
plotName <- 'Comparison of latitudinal averages'

xlims <- c(65,80) # x axis extent

input_df <- structure(list(flux = c(0.08733913, 0.1015934, 
      0.1244135, 0.1390303,0.08417182,   0.02371609), 
      model = structure(c(1L, 1L, 1L,1L, 1L, 1L),.Label = 
      c("CASA_GFED_Optimized"),  class = "factor"), lat = 
      c(79, 77, 75, 73, 71, 69)), .Names = c("flux","model",  
      "lat"),row.names = c(NA, -6L), class = "data.frame")

 lower_region_values<-c(-0.002157493,-0.004465291,-0.376925852,
     -0.312737571,-0.327533801,  -0.299551351)

 upper_region_values<-c(1.943331e-06,1.758454e-04,3.183347e-01,
      2.442368e-01,1.206353e-  01,1.572531e-02)

 sd_input_lower$model <- factor(sd_input_lower$model, 
      levels=levels(input_df$model))
 sd_input_upper$model <- factor(sd_input_upper$model, 
      levels=levels(input_df$model))

使用两个向量中的值需要阴影区域:lower_region_values和upper_region_values

 chart <- ggplot(input_df, aes(x=lat, group=model, 
      colour=model, fill=model)) +

# geom_ribbon(data = sd_input_upper, aes(ymin = -sd, ymax=sd), alpha=0.5) +

 geom_line(aes(y=flux), size=1.0) + 
      opts(title=plotName,legend.position='bottom') +
      scale_x_continuous('Latitude',limits=xlims) +   
      scale_y_continuous(expression(paste('Latitudinal average of NEE ', 
      (g~C~m^{-2}/day)))) +
      scale_colour_discrete(name='Model') +
      scale_fill_discrete(name='Model')

 print(chart) 

1 个答案:

答案 0 :(得分:2)

我会将着色区域添加到同一个data.frame中,因为如果它们都在同一个对象中,那么更容易做ggplots。我得到的情节看起来对我来说有点滑稽,所以我认为我们需要确定当我们添加这些区域时,它们在行中正确匹配x轴值。

input_df$lower_region_values<-c(-0.002157493,-0.004465291,-0.376925852,
     -0.312737571,-0.327533801,  -0.299551351)

input_df$upper_region_values<-c(1.943331e-06,1.758454e-04,3.183347e-01,
      2.442368e-01,1.206353e-01,1.572531e-02)

如果我理解你的目标,我基本上会做你正在做的事情,但是将aes()移动一下:

chart<-
      ggplot(input_df, aes(x=lat, y=flux,group=model)) +
      geom_line(size=1.0,colour="red") + 
      opts(title=plotName,legend.position='bottom') +
      scale_x_continuous('Latitude',limits=xlims) +   
      scale_y_continuous(expression(paste('Latitudinal average of NEE ', 
      (g~C~m^{-2}/day)))) +
      geom_ribbon(aes(ymin = lower_region_values, 
      ymax=upper_region_values), colour="blue", fill="blue",alpha=0.5)

 print(chart) 

你似乎在使用旧版本的ggplot2,所以如果你还在学习ggplot,我会更新并学习新版本,这会有一些重大变化。