r - Ggplot 不显示源函数中的绘图

标签 r plot ggplot2 rstudio

我一直在尝试在 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)

我已经看过了herehere但两者都没有帮助。在 ggsave() 行之后添加 print(HHIplot)print(HHIAvePlot) 未显示绘图。

提前非常感谢。


更新 1:下面建议的解决方案不起作用,尽管它适用于答案的示例代码。我将 ggplot 对象传递给 .Globalenvprint() 在绘图区域上给了我一个空的灰色框(我想象它是一个没有图层的空 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 文件,并将这些图放入您的全局环境中,以便您可以运行 p1p2 在控制台上,它们将出现在 RStudio 的绘图 Pane 中。

再次强调,这是不好的做法

好的做法是不用担心它们不会出现在 RStudio 中。他们写到文件中,你知道他们这样做了,所以去那里看看它们。

关于r - Ggplot 不显示源函数中的绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34518932/

相关文章:

r - ggplot2:如何在使用 scale_xx_manual 后创建正确的图例

R. 字母组合

python - 如何使我的 Bokeh 图居中

matlab - 如何绘制两个变量的分段函数的 3D 图?

python - Length-1数组可以转换为python标量错误? Python

r - 使用 ggplot_build () 手动设置后,如何在 ggplot 箱形图中自定义凹口?

尝试在 ggpairs 之后使用 ggsave 时收到错误

r - 使用plot_usmap 的美国 map 图例中的离散值

根据条件删除列

r - 列表中的笛卡尔积