0

ggplotを使用して、線の周りの影付きの領域をプロットしたいと思います。2つのデータセットは直接関連しておらず、2つのデータセットを比較しています。基本的に、変数「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の2つのベクトルの値を使用して影付きの領域が必要です

 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) 
4

1 に答える 1

2

シェーディング用の領域を同じdata.frameに追加します。これは、それらがすべて同じオブジェクトにある場合、ggplotを実行する方が簡単だからです。結果のプロットは少しおかしいように見えるので、これらの領域を追加するときに、行の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を学習している場合は、いくつかの重要な変更が加えられた新しいバージョンを更新して学習します。

于 2012-11-20T00:09:01.543 に答える