首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件的组geom_vline

条件的组geom_vline
EN

Stack Overflow用户
提问于 2022-10-21 08:05:45
回答 1查看 20关注 0票数 0

我想我做得不对。我有一个有几行画在里面的格图。每一行都按“组”分类。(即)捕食者线包括熊频率线(Lion_frequency);猎物线包括鱼频线、rabbit_frequency线等)。

下面是一个使用虚拟数据的可复制示例

代码语言:javascript
复制
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()

理想情况下,它的工作方式如下:

代码语言:javascript
复制
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对象中了吗?

但我想知道这是否可能?我找不到类似的问题,所以我觉得我走错了路。

对于那些相信需要更多背景的人来说。这是一个反应性的、闪亮的应用程序,我希望用户能够选择如何生成图形(例如,是否有特定的行)。

感谢您的提前指导!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-21 08:21:55

您可以使用if创建条件层,并将它们赋值给一个变量,然后该变量可以像其他层一样添加到您的ggplot中:

注意:如果您想要包含多个层,那么您可以将它们放在一个列表中,例如list(geom_vline(...), geom_vline(...))

代码语言:javascript
复制
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)

代码语言:javascript
复制
p(T, F)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74150563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档