我一直在尝试在 RStudio 中使用 R 的 ggplot 库绘制两个图。问题是,当我在一个函数中绘制两个时,仅显示最后一个(在 RStudio 的“绘图” View 中),而第一个消失。更糟糕的是,当我在每个绘图后运行 ggsave() 时 - 将它们保存到文件中 - 它们都不会出现(但文件按预期保存)。但是,我想像以前一样查看我在图中保存的内容。
有没有一种方法可以在 RStudio 的 plots View 中显示我将要绘制的内容并保存它们?另外,在没有保存图的情况下,为什么图多时会出现显示问题呢? (即为什么它显示最后一个而不是之前的?)
带有绘图部分的代码如下。我删除了一些部分,因为它们看起来没有必要(但如果它们确实相关,可以添加它们)。
HHIplot = ggplot(pergame)
# some ggplot geoms and misc. here
ggsave(paste("HHI Index of all games,",year,"Finals.png"),
path = plotpath, width = 6, height = 4)
HHIAvePlot = ggplot(AveHHI, aes(x = AveHHI$n_brokers))
# some ggplot geoms and misc. here
ggsave(paste("Average HHI Index of all games,",year,"Finals.png"),
path = plotpath, width = 6, height = 4)
我已经看过了here和 here但两者都没有帮助。在 ggsave()
行之后添加 print(HHIplot)
或 print(HHIAvePlot)
未显示绘图。
提前非常感谢。
更新 1:下面建议的解决方案不起作用,尽管它适用于答案的示例代码。我将 ggplot 对象传递给 .Globalenv
和 print()
在绘图区域上给了我一个空的灰色框(我想象它是一个没有图层的空 ggplot 对象)。我认为问题可能出在我使用的某些层或操纵器上,因此我在下面提供了一个 ggplot 对象的完整代码。有什么想法吗? (注意:我尝试将 assign()
行放在与 ggsave()
和 ggplot()
相关的所有可能位置。)
HHIplot = ggplot(pergame)
HHIplot +
geom_point(aes(x = pergame$n_brokers, y = pergame$HHI)) +
scale_y_continuous(limits = c(0,10000)) +
scale_x_discrete(breaks = gameSizes) +
labs(title = paste("HHI Index of all games,",year,"Finals"),
x = "Game Size", y = "Herfindahl-Hirschman Index") +
theme(text = element_text(size=15),axis.text.x = element_text(angle = 0, hjust = 1))
assign("HHIplot",HHIplot, envir = .GlobalEnv)
ggsave(paste("HHI Index of all games,",year,"Finals.png"),
path = plotpath, width = 6, height = 4)
最佳答案
我会先说以下是不好的做法。为了像这样微不足道的事情而破坏编程语言的作用域规则被认为是不好的做法,但无论如何,这就是它的做法。
因此,在函数体内,您将创建两个图并将它们放入变量中。然后您将使用 ggsave() 来将它们写出来。最后,您将使用 assign()
将变量推送到全局范围。
library(ggplot2)
myFun <- function() {
#some sample data that you should be passing into the function via arguments
df <- data.frame(x=1:10, y1=1:10, y2=10:1)
p1 <- ggplot(df, aes(x=x, y=y1))+geom_point()
p2 <- ggplot(df, aes(x=x, y=y2))+geom_point()
ggsave('p1.jpg', p1)
ggsave('p2.jpg', p2)
assign('p1', p1, envir=.GlobalEnv)
assign('p2', p2, envir=.GlobalEnv)
return()
}
现在,当您运行 myFun()
时,它会将您的两个图写入 .jpg 文件,并将这些图放入您的全局环境中,以便您可以运行 p1
或 p2
在控制台上,它们将出现在 RStudio 的绘图 Pane 中。
再次强调,这是不好的做法
好的做法是不用担心它们不会出现在 RStudio 中。他们写到文件中,你知道他们这样做了,所以去那里看看它们。
关于r - Ggplot 不显示源函数中的绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34518932/