【问题标题】:Use R to create graphs/plots/charts and GTK to display and interact with them使用 R 创建图形/绘图/图表并使用 GTK 显示并与它们交互
【发布时间】:2026-01-15 18:00:02
【问题描述】:

我想使用 R 生成一些图形/绘图/图表,然后使用 GTK 显示它们。一个特点是绘图必须能够自动更新并具有一些交互功能,例如设置最大值/最小值标签、重新缩放、允许标准化等......数据集可能是数千个数据的数量级点,可能高达一万。

是否有任何库/模块已经这样做了?我的 Google-fu 很弱。我不介意 c++ 或 python 。

如果没有这样的库,我怎么能做到这一点

注意:系统是嵌入式的——它当然没有互联网连接,但有一个内部网络。使用网络会大大增加系统的成本,因此它不是解决我的问题的好方法。

【问题讨论】:

标签: c++ python r gtk


【解决方案1】:

我想知道这些图形设备是否会出现 10,000 点的问题,并且在 RGtk2Qt 下运行此 gWidgets 脚本,它几乎快到可以接受的边界(当然是在我的老化机器100,000点太多了):

library(gWidgets)
options(guiToolkit="RGtk2")
w <- gwindow("test")
pg <- gpanedgroup(cont=w)
fl <- glayout(cont=pg)
gg <- ggraphics(cont=pg)
size(gg) <- c(600, 600)

fl[1,1] <- "No. points"
fl[1,2] <- no_pts <- gedit("10", cont=fl, coerce.with=as.numeric)
fl[2,2] <- gbutton("click me", cont=fl, label="", handler=function(h,...) {
  n <- svalue(no_pts)
  plot(rnorm(n), rnorm(n))
})

如果这个速度是可以接受的,那么可以相对容易地根据您的特定需求制作一个符合游戏规则的 GUI。可能是 cranvas 包可以让 Qt 更快。

否则,我不知道 Duncan Murdoch 的 rgl 包是否有用,但它可能有用。 Simon Urbanek 在上次用户会议上做了一个非常好的演示,其中一些浏览器中的 openGl 图形引擎允许非常快速的绘图,超过 1,000,000 点,这是通过 websocket 完成的。

【讨论】:

    【解决方案2】:

    由于您也将 python 放入了标签中,也许matplotlib 会引起一些兴趣?以防万一。

    【讨论】:

    • 是的,我确实也在看它。谢谢。
    【解决方案3】:

    对于允许来自服务器的这种功能的基于 Web 的解决方案(Web 是未来 :)),我将看一下 Rstudio 人员刚刚发布的闪亮包。它看起来像您需要的,无需您进行任何编程。您还可以获得任何拥有浏览器的人都可以从任何地方打开它的好处。看到这个链接:

    http://blog.rstudio.org/2012/11/08/introducing-shiny/

    【讨论】:

    • 您的问题没有指定这个约束,嵌入式平台上的 gui 是否足够快?
    • 这个系统是嵌入式的——它当然没有互联网连接,但有一个内部网络。使用网络会大大增加系统的成本,因此它不是解决我的问题的好方法。但是,我没有在问题中指定这一点,所以你的答案是一个很好的答案,但遗憾的是对我的用例没有用。
    • 没问题,但是这些限制非常重要,因此最好在任何其他问题中添加它们。您还可以编辑您的问题以包含您的附加限制。
    【解决方案4】:

    首先,R 的核心不具有交互式绘图功能——这与使用编程语言本身控制几乎所有东西的想法背道而驰。

    有一些库允许您创建或多或少的交互式绘图,从您需要包装到 R 程序中的简单的 locator 函数开始,包括来自 RStudio 的 manipulate 包以及iplot 包。甚至还有一个基于 GTK+ 的 R 包,名为 playwith

    根据您实际想要实现的目标,也许使用 gnuplot 会更好。

    【讨论】: