2016-12-19 13 views
1

アイデアは、1つの特定の線の周りに複数の線とリボンを持つグラフを作成することです。R:geom_ribbon()データ変換

ここではデータです:

x <- data.table(a = 1:10, y = runif(10, 1, 2), z = runif(10, 1, 2)) 
x[,y_h:=y+.2] 
x[,y_l:=y-.2] 
x <- melt(x, id.vars = ("a"), variable.factor = F) 

これは、折れ線グラフを生成します。

ggplot(x[variable %in% c("y", "z")], aes(x = a, y = value, color = variable)) + 
    geom_line() + 
    theme_minimal() 

これは、リボンのグラフを生成します。

エラーが発生し、両方の組み合わせ
ggplot(data = dcast(x[variable %in% c("y_h", "y_l")], a ~ variable, value.var = "value"), 
     aes(x = a, ymin = y_l, ymax = y_h)) + 
    geom_ribbon(alpha = .3) + 
    theme_minimal() 

ggplot(x[variable %in% c("y", "z")], aes(x = a, y = value, color = variable)) + 
    geom_line() + 
    theme_minimal() + 
    geom_ribbon(data = dcast(x[variable %in% c("y_h", "y_l")], a ~ variable, value.var = "value"), 
       aes(x = a, ymin = y_l, ymax = y_h), alpha = .3) 

Error in eval(expr, envir, enclos) : object 'value' not found 

複数の行には長​​い形式のデータが必要であり、リボンにはyminymaxに入る列の幅が広いことが必要です。このエラーメッセージは、問題の原因を特定するのに役立つものではありません。

答えて

1

質問を投稿した直後に、私は自分自身で答えを得ているように見えます。ここで

ggplot(data = dcast(x[variable %in% c("y_h", "y_l")], a ~ variable, value.var = "value")) + 
    geom_ribbon(aes(x = a, ymin = y_l, ymax = y_h), alpha = .3) + 
    geom_line(data = x[variable %in% c("y", "z")], aes(x = a, y = value, color = variable)) + 
    theme_minimal() 

私は問題がggplot()コールの下で、geom_ribbon()に対してグローバルaes()変数を設定したと思います。どうやら、後でaes()を次のように定義しても、後でgeomのそれぞれに対して明示的に定義しても、それは後で崩れます。しかし、まだエラーメッセージが正しいパスから私を投げ捨てました。