如果满足条件,在R中绘制一条竖直线

6

如果满足条件,我想要绘制垂直线。

数据框示例:

require(ggplot2)
require(dplyr)

example <- data.frame(
  X = c (1:5), 
  Y = c(8,15,3,1,4),
  indicator = c(1,0,1,0,0) 
)

example %>% ggplot(aes(x=X,y=Y)) + geom_line() + geom_vline(xintercept=X)

在截距中,X的值是指当指示器为1时,X的值。因此,在这种情况下,我只想要当指示器值为1时的垂直线。在这个例子中,这将在X=1和X=3处创建垂直线。有没有人对如何解决这个问题有什么想法?谢谢!

2个回答

11
以下内容应该能满足您的需求。
library(ggplot2)
library(dplyr)

example <- data.frame(
  X = c (1:5), 
  Y = c(8,15,3,1,4),
  indicator = c(1,0,1,0,0) 
)

example %>%
    ggplot(aes(x=X,y=Y)) +
    geom_line() +
    geom_vline(aes(xintercept = X),
               data = example %>% filter(indicator == 1))

# OR using '.' instead of "example" in geom_vline
example %>%
    ggplot(aes(x=X,y=Y)) +
    geom_line() +
    geom_vline(aes(xintercept = X),
               data = . %>% filter(indicator == 1))

这是生成的图像。

enter image description here

注意:在上面的示例中,调用geom_vline时使用了名为exampledata.frame,但这可以是任何其他包含所需值作为截距的data.frame

1
谢谢!这正是我在寻找的! - JayBee

4

以上稍作修改:

example %>% ggplot(aes(x=X,y=Y)) + geom_line() + 
  geom_vline(aes(xintercept=X), data=. %>% filter(indicator == 1))

data还可以是一个函数,因此您不需要在geom_vline图层中硬编码example。既然您已经在使用dplyr,通过以句点开头将管道转换为函数很容易。


谢谢你的贡献,我会把它加入到我的代码中 :) - JayBee
很好,也适用于面向方面。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接