我想我做得不对。我有一个有几行画在里面的格图。每一行都按“组”分类。(即)捕食者线包括熊频率线(Lion_frequency);猎物线包括鱼频线、rabbit_frequency线等)。
下面是一个使用虚拟数据的可复制示例
p <- function(black_lines, green_lines){
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() +
geom_vline(xintercept = 5) +
geom_vline(xintercept = 10) +
geom_vline(xintercept = 1:5,
colour = "green",
linetype = "longdash")
}
p()理想情况下,它的工作方式如下:
p <- function(black_lines, green_lines){
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() +
if (black_lines){
geom_vline(xintercept = 5) +
geom_vline(xintercept = 10) +
}
if(green_lines){
geom_vline(xintercept = 1:5,
colour = "green",
linetype = "longdash")
}
}
p(T, T)这个方法不能工作,当然,因为R不喜欢->错误在ggplot_add():!无法将ggproto对象一起添加。你忘了把这个对象添加到一个ggplot对象中了吗?
但我想知道这是否可能?我找不到类似的问题,所以我觉得我走错了路。
对于那些相信需要更多背景的人来说。这是一个反应性的、闪亮的应用程序,我希望用户能够选择如何生成图形(例如,是否有特定的行)。
感谢您的提前指导!
发布于 2022-10-21 08:21:55
您可以使用if创建条件层,并将它们赋值给一个变量,然后该变量可以像其他层一样添加到您的ggplot中:
注意:如果您想要包含多个层,那么您可以将它们放在一个列表中,例如list(geom_vline(...), geom_vline(...))。
library(ggplot2)
p <- function(black_lines, green_lines){
vline_black <- if (black_lines) geom_vline(xintercept = c(5, 10))
vline_green <- if (green_lines) geom_vline(xintercept = 1:5,
colour = "green",
linetype = "longdash")
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
vline_black +
vline_green
}
p(T, T)

p(T, F)

https://stackoverflow.com/questions/74150563
复制相似问题