2

Rとggplot2を使用して、バスケットボールの試合の統計を分析しています。私はRとggplotを初めて使用しますが、経験が限られているため、得られる結果が気に入っています。しかし、私が進むにつれて、私のコードが繰り返されることに気づきます。嫌いです。

私はこれに似たいくつかのプロットを作成しました:

有効フィールド目標パーセンテージによる正味評価

コード:

efgPlot <- ggplot(gmStats, aes(EFGpct, Nrtg)) + 
  stat_smooth(method = "lm") + 
  geom_point(aes(colour=plg_ShortName, shape=plg_ShortName))  + 
  scale_shape_manual(values=as.numeric(gmStats$plg_ShortName))

プロット間の違いはx値だけです。次のプロットは次のようになります。

orPlot <- ggplot(gmStats, aes(ORpct, Nrtg)) + 
  stat_smooth(method = "lm") + ...  # from here all is the same

次のようなことができるように、これをどのようにリファクタリングできますか?

efgPlot <- getPlot(gmStats, EFGpct, Nrtg))
orPlot  <- getPlot(gmStats, ORpct, Nrtg))

アップデート

これをリファクタリングする私の方法は、実際には「Rっぽい」(または、必要に応じてggplotっぽい)ではないと思います。以下のbaptisteのコメントに基づいて、関数にリファクタリングすることなくこれを解決しました。以下の私の答えを参照してください。

4

2 に答える 2

6

この種のものの鍵は、 (もちろん、テストされていない)aes_stringではなく使用することです:aes

getPlot <- function(data,xvar,yvar){
    p <- ggplot(data, aes_string(x = xvar, y = yvar)) + 
            stat_smooth(method = "lm") + 
            geom_point(aes(colour=plg_ShortName, shape=plg_ShortName))  + 
            scale_shape_manual(values=as.numeric(data$plg_ShortName))
    print(p)
    invisible(p)
}

aes_string変数名を式ではなく文字列として渡すことができます。これは、関数を作成するときに便利です。もちろん、スケールの色や形をハードコーディングしたくない場合もあります。その場合はaes_string、それらに再度使用できます。

于 2012-05-31T12:30:41.897 に答える
1

Joranの答えは私を大いに助けました(そして彼は私の質問に正確に答えます)が、私は最終的にbaptisteの提案に従ってこれを解決しました:

# get the variablesI need from the stats data frame:
forPlot <- gmStats[c("wed_ID","Nrtg","EFGpct","ORpct","TOpct","FTTpct",
                     "plg_ShortName","Home")] 
# melt to long format:
forPlot.m <- melt(forPlot, id=c("wed_ID", "plg_ShortName", "Home","Nrtg"))
# use fact wrap to create 4 plots:
p <- ggplot(forPlot.m, aes(value, Nrtg)) +
  geom_point(aes(shape=plg_ShortName, colour=plg_ShortName)) + 
  scale_shape_manual(values=as.numeric(forPlot.m$plg_ShortName)) +
  stat_smooth(method="lm") +
  facet_wrap(~variable,scales="free")

それは私に与えます:

4つのパフォーマンス指標の関数としての正味評価

于 2012-06-02T13:43:40.020 に答える