将函数参数传递给ggplot标签

时间:2016-02-22 17:35:54

标签: r function ggplot2 axis-labels

我对ggplot和R比较陌生,我正在尝试编写一个小函数,以便为多种鸟类运行相同的代码,由函数参数中的种类代码表示。我想使用单个参数作为散点图的y轴数据和y轴标签。

我已经阅读了this question的答案,但我无法同时正确显示y轴和x轴:

# set up
library(ggplot2)

df.eg <- data.frame(
  yr = sample(2005:2015,100,replace=TRUE),
  rt = sample(letters[1:4],100,replace=TRUE),
  SP1 = sample(0:10,100,replace=TRUE),
  SP2 = sample(0:20,100,replace=TRUE)
)
attach(df.eg)

# standalone ggplots to wrap in function, ylab automatically correct
p1<-ggplot(df.eg, aes(x=yr, y=SP1)) + geom_point() +
    stat_smooth(method="lm", se=TRUE)
p1

p2<-ggplot(df.eg, aes(x=yr, y=SP1)) + geom_point() +
    stat_smooth(method="lm", se=TRUE) + facet_wrap(~rt)
p2

# wrap the two plots in function
fx.eg <- function(SPX)
{
  p1<-ggplot(df.eg, aes(x=yr, y=SPX)) + geom_point() +
    stat_smooth(method="lm", se=TRUE) + ylab(SPX)

  p2<-ggplot(df.eg, aes(x=yr, y=SPX)) + geom_point() +
    stat_smooth(method="lm", se=TRUE) + facet_wrap(~rt) + ylab(SPX)

  return(list(p1,p2))
}

# run function on second species
fx.eg(SP2)

如果我没有在函数中指定ylab(),则图表显示“SPX”(没有引号)作为y轴标签而不是函数参数。

如果我使用aes(x=yr, y=SPX),请在函数中添加+ ylab(SPX),然后调用fx.eg(SP2),y轴标签会显示为数字(在本例中为4,但每次尝试时)不同的东西,它是一个不同的数字)。

如果我使用aes_string(x=yr, y=SPX),请在函数中保留+ ylab(SPX),并调用fx.eg(SP2),y轴显示正确(即“SP1”或“SP2”),但x -axis显示为年份列表(例如“c(2010L,2009L,2008L等......)”

我觉得我非常亲近,但却无法让所有人齐心协力。任何提示都会非常感激。

0 个答案:

没有答案