3

我想绘制图中使用的数据和操作变量(此处:rangeMinrangeMax)。变量变化的后果应该在图中直接可见。

我想要有 GUI 元素(例如滑块),我可以使用它来更改变量值rangeMinrangeMax调用rangePlot()函数。

R 中是否有提供 GUI 元素的输出设备?

# generate example data
n <- 100
x <- 1:n
y <- x + (runif(n) * 25)

# rangeMin: value I'd like to manipulate using sliders
# rangeMax: value I'd like to manipulate using sliders
rangePlot <- function(x, y, rangeMin, rangeMax) {
  plot(x, y)

  # linear regression using datapoints a a certain range
  plotrange <- c(rangeMin:rangeMax)

  # linear model (y is mapped on x)
  linReg = lm(formula = y[plotrange] ~ x[plotrange])
  abline(linReg, col=2)

  # highlight points used for liniar regression
  points(x[plotrange], y[plotrange], col=2, pch=3)

  # show slope and intercept in the plot
  text(
    x=min(x),
    y=max(y),
    paste0(
      "intercept: ", linReg$coefficients[1],
      "\nslope: ", linReg$coefficients[2]
      ),
    adj=c(0, 1)
  )
}

# manual call
rangePlot(x=x, y=y, rangeMin=1,     rangeMax=n)
rangePlot(x=x, y=y, rangeMin=0.2*n, rangeMax=0.8*n)
rangePlot(x=x, y=y, rangeMin=50, rangeMax=60)
#
4

1 回答 1

2

对评论进行详细说明。RStudio 的操作包使这些事情变得非常容易。该包在 RStudio 中工作。如果你想在没有 RStudio 的情况下使用相同的语法,gWidgets2 中有一个示例(不需要 gWidgetsManipulate):

require(tcltk); require(tkrplot)
require(gWidgets2)                      # require(devtools); install_github(c("gWidgets2", "gWidgets2tcltk"), "jverzani")
options(guiToolkit="tcltk")
source(system.file("examples", "manipulate.R", package="gWidgets2"))

w <- gwindow("Manipulate example", visible=FALSE)

manipulate({
  y <- get(distribution)(size)
  plot(density(y, bw=bandwidth/100, kernel=kernel))
  points(y, rep(0, size))
},
           ##
           distribution=picker("Normal"="rnorm", "Exponential"="rexp"),
           kernel=picker("gaussian", "epanechnikov", "rectangular",
             "triangular", "cosine"),
           size=picker(5, 50, 100, 200, 300),
           bandwidth=slider(0.05 * 100, 2.00 * 100, step=0.05 * 100, initial=1* 100), # integers needed
           button=button("Refresh"),

           container=w
           )
visible(w) <- TRUE

使用 RGtk2 或 Qt 后端的 GUI 看起来更好,但这些通常更难安装。

于 2013-04-05T15:42:43.517 回答