用ggplot和aes_string绘制绘图函数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (36)

在第10.3章中的Hadley Wickham的ggplot2书中,他暗示要制作剧情功能。我想制作许多使用刻面的类似地块,但我无法引用列。如果我所有的引用都是美学的,那么我可以使用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')

“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= ?????)
提问于
用户回答回答于

facet_wrap期望一个公式作为它的第一个参数,所以我只是强制它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')
用户回答回答于

如果我刚刚使用过sp='Species',你的函数对我没有任何修改,也就是你想要改变的变量的名字。

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

扫码关注云+社区