【问题标题】:Dashboards - (dial) meters in R仪表板 - R 中的(表盘)仪表
【发布时间】:2012-09-14 17:52:12
【问题描述】:

我想知道是否可以在 R 中制作这种仪表板(我的意思是这种地块)?

这是我想在 R 中做的例子(首先来自SAS

编辑:我在 Windows 7(64 位)上工作。

【问题讨论】:

  • 您是在寻找可以立即为您提供此功能的东西,还是愿意为此付出一些努力?
  • 也许两者兼而有之,如果我有事情要开始工作,但如果有办法更快地做到这一点,我将不胜感激。

标签: r dashboard


【解决方案1】:

这里是使用基本图形开始的一些东西。让它更漂亮留给读者。您可以在此处查看示例:http://www.math.csi.cuny.edu/gw/ex-dashboard.R

dashboard <- function(dial=list(
                        list(color="red",
                             range=c(10, 40)),
                        list(color="yellow",
                             range=c(40, 60)),
                        list(color="green",
                             range=c(70, 100))
                        ),
                      value=from) {


  from <- min(unlist(lapply(dial, "[[", i="range")))
  to <-  max(unlist(lapply(dial, "[[", i="range")))

  theta <- seq(-pi/3, pi + pi/3, length=100)
  r <- 1

  scale <- function(x) {
    m <- (pi + pi/3 - (-pi/3))/(from - to)
    (pi + pi/3) + m*(x - from)
  }

  plot.new()
  plot.window(xlim=c(-1, 1), ylim=c(sin(-pi/3), 1))

  lines(cos(theta), sin(theta))
  sapply(dial, function(l) {
    d <- scale(l$range)
    x <- seq(d[1], d[2], length=100)
    lines(cos(x), sin(x), col=l$color, lwd=3)
  })

  ticks <- pretty(c(from, to), n=5)
  ticks_th <- scale(ticks)
  r <- 1 - .15
  text(r*cos(ticks_th), r*sin(ticks_th), labels=ticks)

  sapply(ticks_th, function(th) {
    lines(cos(th)*c(1,.95), sin(th)*c(1, .95))
  })

  r <- 1 - .25
  th <- scale(value)
  arrows(0, 0, cos(th), sin(th))


}

dashboard( value=60)

【讨论】:

  • 很棒的功能!我不习惯在圈子里思考,cos,sin等等……把这个图改成左边为0,右边为100的半个圆圈(上半部分)容易吗?
【解决方案2】:

你可以用极坐标图做类似的事情:

require(plotrix)
polar.plot( c(0,20),c(0,60),main="Dashboard",lwd=3,line.col=4)

如果您想自定义外观,可以深入研究代码。使用radial.plot 可能会给您更多的自定义。

【讨论】:

    【解决方案3】:

    这与 R 关系不大,而仅与 如何获取表示仪表板项目的 GUI 小部件有关

    我认为 Gtk2 可能会这样做,因此 RGtk2 包(及其包装器)可能会有所帮助。我知道 Qwt 工具包有一个事实,但是那个更难访问(因为你需要一个 C++ 桥)。

    【讨论】:

    • 所以没有办法在 R 中绘制这样的米?好吧,我不需要 gui,而是需要类似的数字/情节。
    • 我没有说不可能。我确实说过它不是内置的。我知道 Qwt 工具包(用于 C++,建立在 Qt 之上)有它。但这并不容易(但可能)。这取决于很多东西,比如平台、操作系统……你都没有说。
    猜你喜欢
    • 1970-01-01
    • 2018-04-03
    • 2015-04-22
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2020-06-13
    • 1970-01-01
    相关资源
    最近更新 更多