【问题标题】:How do I clear the plot viewer in Rstudio?如何清除 Rstudio 中的绘图查看器?
【发布时间】:2021-02-08 04:44:02
【问题描述】:

我正在将对象保存到列表中,并且我想在加载这些对象时清除绘图窗格和查看器窗格。在浏览完列表元素中的图表后,我基本上希望后退按钮变灰。

这是我的代码

gg <- ggplot(iris, aes(width, length)) + geom_point
l <- list()
l[["element"]] <- gg

我想要它,这样当我运行 l$element 时,就像我第一次在 rstudio 的绘图和查看器选项卡上单击扫帚一样。

【问题讨论】:

  • 命令graphics.off(); plot(l$element)会做你想做的事吗?
  • 我可以让它在我调用列表中的元素时触发吗?
  • 我认为它不是重复的,因为我要求它在调用列表元素时触发
  • 您想重新定义子集所有列表的行为吗?或者代码怎么知道只为这个列表执行?也许编写自己的子集函数?这种不寻常的行为肯定有现有的功能。我想您可以创建自己的类并覆盖 $ 函数,但是 l 不会是基本列表。不过我不建议这样做,因为如果其他人在哪里使用该代码可能会非常混乱。

标签: r rstudio


【解决方案1】:

只要将 ggplot 存储在自定义 S3 类中,其默认打印方法调用 dev.off 然后绘制封闭的 ggplot,您就可以做到这一点:

gg_wipe <- function(x) structure(list(plot = x), class = "gg_wipe")

print.gg_wipe <- function(x) {dev.off(); print(x$plot)}

gg <- ggplot(iris, aes(Sepal.Width, Sepal.Length)) + geom_point()
l <- list() 
l[["element"]] <- gg_wipe(gg)

l[["element"]]

【讨论】:

    【解决方案2】:

    或者,您可以提供一个辅助函数,然后提供不同的方法来实现它,而不是像 Allan 那样包装绘图(这是一个好主意)。所以这直接调用了辅助函数

    l <- list(
       apple=ggplot(data.frame(x=1:3, y=1:3)) + geom_point(aes(x,y)),
       banana=ggplot(data.frame(x=1:3, y=3:1)) + geom_point(aes(x,y))
    )
    clear_and_print <- function(x, ele) {
       graphics.off(); invisible(print(x[[deparse(substitute(ele))]]))
    }
    clear_and_print(l, apple)
    

    您可以定义一些新的运算符,但它们必须在语法上有效。你不能有^^^ bur 你可以有%^%

    `%^%` <- clear_and_print
    l %^% apple
    l %^% banana
    

    或者你可以为你的容器创建一个特殊的类

    `$.plot_clear` <- function(x, ele) {
      graphics.off(); x[[ele]]
    }
    class(l) <- "plot_clear"
    l$apple
    l$banana
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2022-12-22
      相关资源
      最近更新 更多