23

Hadley Wickham のggplot2 book の 10.3 章で、彼はプロット関数の作成について言及しています。ファセットを使用して同様のプロットを多数作成したいのですが、列を参照できません。私のすべての参照が美学にある場合、aes_string を使用でき、すべてが機能します。Facet_wrap には類似物がないようです。

library(ggplot2)
data(iris)

これは私が機能化したいプロットです。

pl.flower1 <- ggplot(data=iris, 
                    aes_string(x='Sepal.Length', y='Sepal.Width', color='Petal.Length')) +
                                 geom_point() +facet_wrap(~Species)

これは、ファセットしない場合に機能します。

flowerPlot <- function(dat, sl, sw, pl, sp){
  ggplot(data=dat, aes_string(x=sl, y=sw, color=pl)) + geom_point()
}
pl.flower2 <- flowerPlot(iris, sl='Sepal.Length', sw='Sepal.Width', pl='Petal.Length')

2 行下の "sp" は何ですか? 式、文字列?アプローチ全体が間違っているのかもしれません。

flowerPlotWrap <- function(dat, sl, sw, pl, sp){
      ggplot(data=dat, aes_string(x=sl, y=sw, color=pl)) + geom_point() +facet_wrap(sp)
    }
    pl.flower3 <- flowerPlotWrap(iris, sl='Sepal.Length', sw='Sepal.Width', pl='Petal.Length', sp= ?????)

答えに加えて、誰かがこの問題にどのようにアプローチするかについてのポインタが欲しいですか?

4

3 に答える 3

22

facet_wrapは最初の引数として数式を想定しているので、 で強制的に変換し、 myを文字列としてas.formulaフィードします。sp

flowerPlotWrap <- function(dat, sl, sw, pl, sp){
      ggplot(data=dat, aes_string(x=sl, y=sw, color=pl)) + 
      geom_point() +facet_wrap(as.formula(sp)) # note the as.formula
}
pl.flower3 <- flowerPlotWrap(iris, sl='Sepal.Length', 
                             sw='Sepal.Width', pl='Petal.Length', 
                             sp= '~Species')

または、数式が常に のようになる場合は、それを に組み込み、列名を渡す~[columnname]ことができます。flowerPlotWrap

flowerPlotWrap <- function(dat, sl, sw, pl, sp){
      ggplot(data=dat, aes_string(x=sl, y=sw, color=pl)) + 
      geom_point() +facet_wrap(as.formula(sprintf('~%s',sp)))
}
pl.flower3 <- flowerPlotWrap(iris, sl='Sepal.Length', 
                             sw='Sepal.Width', pl='Petal.Length', 
                             sp= 'Species')

(あなたの質問の再現可能な例への称賛!誰もが質問をしただけでなく、回答がはるかに早く得られた場合)。

于 2012-04-04T04:29:01.767 に答える
1

を使用しただけの場合sp='Species'、つまり、ファセットする変数の名前を使用した場合、関数は変更されていなくても問題なく機能しました。

flowerPlotWrap(iris, sl='Sepal.Length', sw='Sepal.Width', pl='Petal.Length', sp='Species')

ここに画像の説明を入力

于 2012-04-04T04:28:42.827 に答える