我一直试图在RStudio中使用R的ggplot库绘制两个图。问题是,当我在一个函数中绘制两个时,只显示最后一个(在RStudio的“图”视图中),第一个消失。更糟糕的是,当我在每个绘图之后运行ggsave()
- 将它们保存到文件中 - 它们都不会出现(但文件会按预期保存)。但是,我想要查看我之前在剧情中保存的内容。
有没有办法可以在RStudio的情节视图中显示我将要绘制的内容并保存它们?此外,当没有保存地块时,为什么在有多个地块时会出现显示问题? (也就是为什么它显示最后一个而不是之前的?)
带有绘图部分的代码如下。我删除了一些部分,因为它们似乎没必要(但如果确实相关,可以添加它们)。
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,但都没有帮助。在print(HHIplot)
行之后添加print(HHIAvePlot)
或ggsave()
未显示该图。
非常感谢提前。
更新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)
答案 0 :(得分:2)
我将在前言中说以下是不好的做法。打破一种编程语言的范围规则是不好的做法,这对于像这样微不足道的事情,但无论如何都是这样做的。
因此,在函数体内,您将创建两个图并将它们放入变量中。然后你将使用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
或{{1}在控制台上,它们将出现在RStudio的Plot窗格中。
再次,这是不好的做法
良好的做法是不要担心它们没有出现在RStudio中。他们写了文件,你知道他们做了,所以去那里看看。