在现有图上添加线的框架:ggplot中的“​​点”和“图”

时间:2018-10-24 13:30:20

标签: r ggplot2

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

我有一些基于布尔参数的函数,可以绘制新图或在现有图的顶部绘制图。这是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)
    }
}

这种功能风格对我很有用,因为我将所有这些功能都导入了降价文档中,然后在一个图上绘制任意数量的点确实很容易。例如,在降价文档中:

```{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进行等效设置?还是只是建议您更改设计而设计不佳?

1 个答案:

答案 0 :(得分: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)
}

但是,如果您向图中添加其他数据,则只需确保美学映射匹配即可。