我对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等......)”
我觉得我非常亲近,但却无法让所有人齐心协力。任何提示都会非常感激。