r语言 - 在现有图上添加线条的框架:ggplot 中的"points"和"plot"



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

我有一些函数,基于布尔参数,要么在现有图的顶部绘制新图。这是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 文档中,然后很容易在一个图上绘制任意大量的点。例如,在降价文档中:

```{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 进行等效设置?或者这只是您建议更改的糟糕设计?

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

因此,在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)
}

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

最新更新