【问题标题】:Framework for adding lines on existing plots: "points" and "plot" in ggplot在现有图上添加线条的框架:ggplot 中的“点”和“图”
【发布时间】:2018-10-24 13:30:20
【问题描述】:

这可能是一个非常幼稚的问题。我搜索并找不到重复项,但如果有人问过这个问题,请告诉我!

我有一些基于布尔参数的函数,它们要么创建一个新图,要么在现有图的顶部绘制。这是一个 MWE:

plotThing <- function(boolPoints = FALSE, color = "black") {
    x <- sample(c(1:100), size = 10, replace=TRUE)
    y <- sample(c(1:100), size = 10, replace=TRUE)

    if(boolPoints) {
            points(y~x, col = color, pch = 19)
    }

    else {
            plot(y~x, col = color, pch = 19)
    }
}

这种风格的函数对我很有用,因为我将所有这些函数都导入到 Markdown 文档中,然后在一个绘图上绘制任意大量的点真的很容易。比如在markdown文档中:

```{r MWE}
source("MWE.R")
plotThing();
plotThing(boolPoints = TRUE, color = "red")
legend("topright", title = "Things", c("thing1", "thing2"), pch = c(19,19), col = c("black", "red"))
```

在实际的代码中,我认为这种风格可能是一个不错的选择,因为我的绘图函数非常大,并且有很多参数会很难一遍又一遍地重复。

是否有可能/如何使用 ggplot 进行等效设置?或者这只是您建议更改的糟糕设计?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我不确定这是否会直接回答您的问题,但我认为它可能会有所帮助。

    所以,在ggplot2 中,您有一个很好的功能,即无需打印即可保存图:

    p <- ggplot(mtcars, aes(x=hp, y=mpg)) + geom_point()
    

    现在,如果您收集了更多数据并将其打印出来,或者只打印基本图,您可以根据条件向同一个图添加更多点:

    if(addPoints){
        print(p + geom_point(data = data.frame(hp=500, mpg=50)))
    } else {
        print(p)
    }
    

    但是,如果您在绘图中添加其他数据,您只需确保 审美映射 匹配。

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 2018-08-30
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 2011-07-13
      相关资源
      最近更新 更多