为什么我的图表没有显示在 RStudio 的“绘图”窗格中?

Mus*_*Guy 3 r ggplot2 rstudio

我编写了几个连接到服务器并收集一些数据并改变这些数据的函数。其中一项功能还可以可视化数据。

由于我总是需要运行所有六个函数 - 并且因为我在需要时编写了它们 - 我决定将它们组合成一个更大的函数(约 400 行,可能很快就会减少到约 350 行)会更有效经过一番清理后),而不必一个接一个地独立运行六个单独的函数。

在梳理这些函数之前,生成可视化效果的函数运行得非常好,它显示在PlotsRStudio 的窗口中。

由于合并了功能,可视化没有显示出来。

我添加了一行来显示图表是否已成功生成,并且始终如此;但是,我再也看不到输出了。

这是图表的代码:

if(chart == TRUE){
    ggplot(plugin_displays[plugin_displays$date <= end_date, ], aes(fill = type)) +
      geom_col(aes(x = time, y = count),
               colour = "black",
               position = "stack") +
      geom_text(aes(x = time, y = total, label = total),
                hjust = -0.15,
                vjust = 0.15,
                size = 3,
                colour = "black",
                angle = 90) +
      scale_y_continuous(limits = c(0, max(plugin_displays$total) * 1.02)) +
      labs(title = paste0("Plugin Loads & Unloads ", start_date, " - ", end_date),
           x = "Time",
           y = "Count") +
      facet_grid(.~date) +
      scale_fill_manual(values=c("forestgreen", "red")) +
      theme(plot.title = element_text(size = 25,
                                      face = "bold",
                                      colour = "black"),
            panel.grid.minor.x = element_blank(),
            panel.grid.major.x = element_blank(),
            axis.text = element_text(colour = "black",
                                     angle = 90))
    print("Chart printed.")
  } else {
    print("Chart not shown by default.  Set chart = TRUE to display chart")
  }
Run Code Online (Sandbox Code Playgroud)

默认情况下,chart设置为,FALSE因为并不总是需要图表。要生成图表,用户在调用函数时指定 或TRUEchart = TRUE它会生成图表(使用if/else);否则,这只是浪费处理能力。

我认为进程发生的顺序可能会影响输出,因此我将绘图移至脚本底部,Plots尽管显示了消息,但它仍然没有显示在窗格中"Chart printed."

该函数作为一个整体执行完美,所需的输出正是我想要的。

执行阶段没有任何错误,数据帧也都符合预期,没有任何错误。

如果我将可视化功能分开,它可以独立工作,没有任何问题。如果我将其放回函数中,它仍然可以成功执行,但没有可视化。

可能是什么原因造成的?

更新(2018 年 6 月 6 日):

有人建议将情节包装在print. 从某种意义上说,这已经起作用了,尽管是在新窗口中,但绘图现在出现了 - 这不是我想要的,这是为了让绘图保留在 RStudio IDE 中。

mas*_*her 7

我遇到过同样的问题。事实证明,我有一些设备正在悄悄地获取绘图。

dev.list()
Run Code Online (Sandbox Code Playgroud)

将给出打开的事物的列表。我有pdf 8 pdf 9

dev.off(8)
dev.off(9)
Run Code Online (Sandbox Code Playgroud)

关闭那些设备

dev.list()
Run Code Online (Sandbox Code Playgroud)

然后说null device 1,然后我的绘图开始出现在视图窗格中。