【问题标题】:gwidgets in R on WindowsWindows 上 R 中的 gwidgets
【发布时间】:2013-02-13 02:36:23
【问题描述】:

在开发用于绘制数据和模型结果的 gWidgets 界面时,我创建了一个绘图页面并使用 par(mfrow=c(4,1)) 将 4 个绘图堆叠起来。

第一个图(顶部的简单 y 与 x)工作正常,但循环中的其余 3 个图创建轴但不绘制数据。为了测试代码,我尝试在循环之前打开一个新的绘图窗口,一切正常。

gwdigetsplot(...) 的交互中是否有一些有用的信息?

编辑 一个可重现的例子:

不起作用:

library(gWidgets)
options(guiToolkit="RGtk2") ## "Qt"
w <- gwindow("brush example", visible=FALSE)
g <- ggroup(container=w)
gg <- ggraphics(container=g)

addHandlerChanged(gg, handler=function(h,...) {
  par(mfrow=c(2,2))
  plot(mpg ~ wt, mtcars)
  plot(mpg ~ wt, mtcars,col='blue')
  plot(mpg ~ wt, mtcars,col='red')
  plot(mpg ~ wt, mtcars,col='green')
})
visible(w) <- TRUE

应该看起来像这样(普通的 R 图形窗口:

不是这样的

【问题讨论】:

  • 你能提供一些示例代码吗?请阅读:stackoverflow.com/questions/5963269/…
  • @Dason 我添加了一个可重现的示例。
  • 这几乎正是我遇到的问题。第一个情节很好,其余的,没有数据。在我的情况下,y 轴刻度缺失,但数字在那里而不是 x 轴。
  • 当绘图是在处理程序中而不是直接在代码中创建时,问题似乎就出现了。上面代码框中的示例。

标签: r plot gwidgets


【解决方案1】:

由于某些原因无法刷新剧情。您可以使用多个 ggraphics 实例,也可以使用ggraphicsnotebook

这是一个使用多个ggraphics 实例的解决方案。

library(gWidgets)
options(guiToolkit="RGtk2") ## "Qt"
w <- gwindow("brush example", visible=FALSE)
gg <- ggroup(container=w,horizontal=F,use.scrollwindow = T)
down.group <- ggroup(container = gg)
up.group <- ggroup(container = gg)

devs.up <- lapply(1:2, function(i) 
                 ggraphics(container=down.group,label=as.character(i)))
devs.down <- lapply(3:4, function(i) 
                 ggraphics(container=up.group,label=as.character(i)))
visible(w) <- TRUE
lapply(c(devs.up,devs.down), function(gg)
addHandlerChanged(gg, handler=function(h,...) {
  par(mfrow=c(1,1))
  plot(mpg ~ wt, mtcars)
}))

【讨论】:

    【解决方案2】:

    有两个问题。一个可能与 windows 上的 cairo 实现有关。这可以通过完全避免 gWidgets 来测试:

    make_plot <- function() {
      par(mfrow=c(2,2))
      plot(mpg ~ wt, mtcars)
      plot(mpg ~ wt, mtcars,col='blue')
      plot(mpg ~ wt, mtcars,col='red')
      plot(mpg ~ wt, mtcars,col='green')
    }
    
    require(RGtk2)
    require(cairoDevice)
    
    w <- gtkWindow(show=FALSE)
    da <- gtkDrawingArea()
    w$add(da)
    w$show(TRUE)
    
    asCairoDevice(da)
    
    make_plot()
    

    另一个问题是将图形绘制调用放在处理程序中。对于 ggraphics,在完成橡皮筋之后调用更改处理程序,而不是在图形本身更改时调用。不确定这是最有用的东西,但它意味着在通过橡皮筋进行选择后调用一些处理程序。 addHandlerClicked 可能更有趣。

    【讨论】:

    • 我测试你的代码...我必须将w$show(TRUE) 更改为w$visible &lt;- TRUE...但我仍然遇到同样的错误...我在 Windows 中。
    • 糟糕。这个问题在于 cairoDevice,可能在下游更远的地方在于 libcairo,因为它似乎只发生在 windows 上。我真的没有很好的解决方法。您可以尝试在 gimage 容器中显示图形,但调整大小对我不起作用。
    • 谢谢...很抱歉在这里提问,但我看到很少有人回答有关gWidgets 的问题。 Shiny 是一个不错的选择吗?
    • 如果你在做 web 图形用户界面,shiny 是 gWidgetsWWW2 的一个很好的替代品。这是一种不同的编程范式,但人们似乎喜欢它。虽然非常好,并且易于分发,但这些 Web GUI 并不像它们的桌面对应物那样功能丰富。例如,可编辑的网格需要一些额外的工作,我还没有看到人们使用树小部件,尽管他们可能有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多