2016-08-17 7 views
0

これは、私は1つのプロットで異なるパラメータで複数の機能を描画したいDraw min, max function in RR 1つのプロットに異なるパラメータを持つ複数の機能を描き

へのフォローアップの投稿です。しかし、ggplotのグループ引数は機能していないようです。

データ:

# data preparation/ load 
feTargetPv <- structure(list(ModelYear = 2012:2016, 
ComplianceCategory = c("pv","pv", "pv", "pv", "pv"), 
fetargetfix = c(30.7, 31.4, 32.1, 33.3, 34.7), 
a = c("35.95", "36.8", "37.75", "39.24", "41.09"), 
b = c("27.95", "28.46", "29.03", "29.9", "30.96"), 
c = c("0.0005308", "0.0005308", "0.0005308", "0.0005308", "0.0005308"), 
d = c("0.006057", "0.00541", "0.004725", "0.003719", "0.002573")), 
.Names = c("ModelYear", "ComplianceCategory", "fetargetfix", "a", "b", "c", "d"), 
row.names = c(47L, 49L, 51L, 53L, 55L), class = "data.frame") 

機能:

my <- c(2012,2013, 2014) 
eqs = function(x,my){ 
    1/(pmin(pmax(as.numeric(feTargetPv[which(feTargetPv$ModelYear == my),"c"]) * x + 
       as.numeric(feTargetPv[which(feTargetPv$ModelYear == my),"d"]), 
       1/as.numeric(feTargetPv[which(feTargetPv$ModelYear == my),"a"])), 
      1/as.numeric(feTargetPv[which(feTargetPv$ModelYear == my),"b"]))) 
} 

Ggplot:

ggplot(data.frame(x=seq(from = 30, to = 75, by = 1)), aes(x), group = my, col = my) + 
    stat_function(fun=eqs, args=my) + xlab("x") + ylab("y") 

エラーメッセージ

Warning message: 
Computation failed in `stat_function()`: 
unused arguments (2013, 2014) 

私のパラメータをstat_function()に与える必要がありますか?

+0

'stat_function'は呼び出しごとに複数の機能を描画するために好きではないようです。おそらく最善の解決策は、ループの中で 'stat_function'への複数の呼び出しを追加することでしょう。参照:http://stackoverflow.com/questions/24949065/multiple-stat-function-on-grouped-data-with-ggplot2 – jdobres

答えて

1

stat_functionを使用するのではなく、ggplot以外の関数で年間の値を計算してからgeom_lineを使用することができます。

ModelYear変数にmyを使用して、毎年x値のデータセットを作成することから始めてください。

dat = expand.grid(x=seq(from = 30, to = 75, by = 1), ModelYear = my) 

次に、x値を関数パラメータ値を含むデータセットにマージします。デフォルトでは、最初のデータセットの情報(dat)のみが保持されます。

dat2 = merge(dat, feTargetPv, by = "ModelYear") 

ここでは、x、a、b、c、dのベクトル、またはデータセットとx変数のいずれかを使用できます。

eqs = function(data, x){ 
    1/(pmin(pmax(as.numeric(data[,"c"]) * x + 
       as.numeric(data[,"d"]), 
       1/as.numeric(data[,"a"])), 
      1/as.numeric(data[,"b"]))) 
} 

関数の値をデータセットに追加します。私はこの新しい変数をyと呼んでいます。

dat2$y = eqs(dat2, dat2$x) 

今プロットはgeom_lineとともにy位置をマッピングするためにyの値を用いて、簡単です。

ggplot(dat2, aes(x, y, color = factor(ModelYear))) + 
    geom_line() 

enter image description here

関連する問題