R:如何在函数内将参数传递给ggplot geom_uu?
我正在尝试创建一个实用函数,它结合了几个R:如何在函数内将参数传递给ggplot geom_uu?,r,ggplot2,R,Ggplot2,我正在尝试创建一个实用函数,它结合了几个geom\uu,如本例所示(不起作用): my_geom_y我没有足够的声誉发表评论,因此这里有一个建议: my_geom_y <- function(xx, yy, colour){ ggplot() + geom_line(aes(x=xx, y=yy), col=colour) + geom_point(aes(x=xx, y=yy), col=colour) } my_geom_y我没有足够的声誉发表评论,因此这
geom\uu
,如本例所示(不起作用):
my_geom_y我没有足够的声誉发表评论,因此这里有一个建议:
my_geom_y <- function(xx, yy, colour){
ggplot() +
geom_line(aes(x=xx, y=yy), col=colour) +
geom_point(aes(x=xx, y=yy), col=colour)
}
my_geom_y我没有足够的声誉发表评论,因此这里有一个建议:
my_geom_y <- function(xx, yy, colour){
ggplot() +
geom_line(aes(x=xx, y=yy), col=colour) +
geom_point(aes(x=xx, y=yy), col=colour)
}
my_geom_y我喜欢MSM的方法,但如果您希望能够将my_geom_y
添加到您已经制作的ggplot中,这是一个可能适合您的选择:
library(ggplot2)
x <- 1:100
my_geom_y <- function(yy, colour = "black"){
list(
geom_line(mapping = aes(y= yy),
col = colour),
data = data.frame(x, yy),
geom_point(mapping = aes(y = yy),
col = colour,
data = data.frame(x, yy))
)
}
ggplot(mapping = aes(x)) +
my_geom_y(x, "red") +
my_geom_y(dlnorm(x), "blue") +
my_geom_y((x^1.1), "black") +
my_geom_y(x/2, "yellow")
库(ggplot2)
x我喜欢MSM的方法,但如果您希望能够将my_geom\u y
添加到您已经制作的ggplot中,这是一个可能适合您的替代方案:
library(ggplot2)
x <- 1:100
my_geom_y <- function(yy, colour = "black"){
list(
geom_line(mapping = aes(y= yy),
col = colour),
data = data.frame(x, yy),
geom_point(mapping = aes(y = yy),
col = colour,
data = data.frame(x, yy))
)
}
ggplot(mapping = aes(x)) +
my_geom_y(x, "red") +
my_geom_y(dlnorm(x), "blue") +
my_geom_y((x^1.1), "black") +
my_geom_y(x/2, "yellow")
库(ggplot2)
x基于@luke-c思想,这使得函数独立,剪切粘贴就绪。我们现在还可以为每条曲线添加标签
my_geom_y <- function(.xx, .yy, yLabel = 1, .colour=NA ){
if (is.na(.colour))
.colour <- palette()[yLabel%%length(palette())]
list( geom_line(mapping=aes(.xx,.yy), col=.colour, data=data.frame(.xx, .yy)),
geom_point(mapping=aes(.xx,.yy), col=.colour, data=data.frame(.xx, .yy)),
annotate(geom="text" , col = .colour, label=deparse(substitute(.yy)),
x=mean(.xx),y=max(.yy)-(max(.yy)-min(.yy))/20*yLabel)
)
}
myX <- 1:10
ggplot() + my_geom_y(myX, dlnorm(myX), 1) +
my_geom_y(myX, dexp(myX), 2) + my_geom_y(myX, dexp(myX,0.7), 3)
my_geom_y基于@luke-c思想,这使得函数独立,可以剪切粘贴。我们现在还可以为每条曲线添加标签
my_geom_y <- function(.xx, .yy, yLabel = 1, .colour=NA ){
if (is.na(.colour))
.colour <- palette()[yLabel%%length(palette())]
list( geom_line(mapping=aes(.xx,.yy), col=.colour, data=data.frame(.xx, .yy)),
geom_point(mapping=aes(.xx,.yy), col=.colour, data=data.frame(.xx, .yy)),
annotate(geom="text" , col = .colour, label=deparse(substitute(.yy)),
x=mean(.xx),y=max(.yy)-(max(.yy)-min(.yy))/20*yLabel)
)
}
myX <- 1:10
ggplot() + my_geom_y(myX, dlnorm(myX), 1) +
my_geom_y(myX, dexp(myX), 2) + my_geom_y(myX, dexp(myX,0.7), 3)
my\u geom\y如果在美学中包含x
,它是否有效?我认为你不可能只用y
的映射来画线或点。多亏了卢克的回答,我现在明白了这是可能的。然而,问题并不是我在美学中没有包含x。解决方案实际上是双重的。它看起来有点不直观,但很管用:1)你必须使用list()
来添加geom
,2)你需要在geom
中有data=
参数(也就是说,仅仅从函数参数列表中找不到nameyy
),谁会想到!我只是在下面稍微修改了一下,所以它只引用内部参数。如果在美学中包含x
,它是否有效?我认为你不可能只用y
的映射来画线或点。多亏了卢克的回答,我现在明白了这是可能的。然而,问题并不是我在美学中没有包含x。解决方案实际上是双重的。它看起来有点不直观,但很管用:1)你必须使用list()
来添加geom
,2)你需要在geom
中有data=
参数(也就是说,仅仅从函数参数列表中找不到nameyy
),谁会想到!我只是在下面稍微修改了一下,所以它只引用内部参数。