r复选框{操作}以打开和关闭数据系列

时间:2012-12-13 14:48:40

标签: r checkbox ggplot2

我正在尝试使用ggplot绘制一条有三行的图表。但后来我希望能够打开或关闭这些线,以便当我'看着过度拥挤的情节时,我可以隐藏一些数据系列。我似乎无法弄清楚如何使用rstudio的操作包(包括复选框)来执行此操作(或者即使它可能)。有人可以告诉我如何使用此软件包或其他任何方式执行此操作吗?谢谢

代码:

manipulate((ggplot(MeanFrameMelt, aes(x=variable, y=value, 
           color=id))+ geom_point()), 
           id = checkbox(FALSE, "File1"))

MeanFrameMelt(数据):

id  variable    value
1   file1   V1  0.04114207
2   file2   V1  0.31830645
3   file3   V1  0.05797068
4   file1   V2  0.04138554
5   file2   V2  0.31510753
6   file3   V2  0.05830449
7   file1   V3  0.04157882
8   file2   V3  0.31220430
9   file3   V3  0.05865419
10  file1   V4  0.04177334
11  file2   V4  0.31117608
12  file3   V4  0.05900918

3 个答案:

答案 0 :(得分:2)

这不是一个操纵问题,而是在创建绘图表达式时要使用3个布尔值的问题。怎么做? checkbox调用会创建这些内容。以下内容并未完全回答您的具体问题,但展示了如何减少这种问题 - 只需逐行添加这些行,而不是优雅。这可以用RStudio来完成,但是我使用的是一种没有RStudio的操作版本:

require(gWidgets2) ## from github
options(guiToolkit="Qt") ## other choices too
source(system.file("examples", "manipulate.R", package="gWidgets2"))

manipulate({
  plot(mpg ~ wt, mtcars)
  if(do_lm)
    abline(lm(mpg ~ wt, mtcars))
  if(do_loess)
    with(mtcars, lines(lowess(wt, mpg)))
  ## ...
},
           do_lm=checkbox("Add regression line"),
           do_loess = checkbox("Add lowess fit")
           )

答案 1 :(得分:1)

这是一种使用TeachingDemos包中的tkexamp函数而不是manipulate的方法:

library(TeachingDemos)
tklist <- rep( list(list('checkbox',init="T")), 3 )
names(tklist) <- levels( MeanFrameMelt$id )

tkfun <- function(...) {
    w <- c(...)
    w2 <- names(w)[w]
    df <- MeanFrameMelt[ MeanFrameMelt$id %in% w2, ]
    print(ggplot(df, aes(x=variable, y=value,
                  color=id)) + geom_point() )
}

tkexamp( tkfun, tklist )

如果最后一行是:

,它看起来好一点
tkexamp( tkfun, list(id=tklist), plotloc='left' )

对ggplot2更熟悉的其他人需要知道如何修改它以使颜色保持不变,并且可选地y限制保持不变。

修改

这是一个函数版本,即使不显示某些值,也能保持颜色和y限制相同:

tkfun <- function(...) {
  w <- c(...)
  w2 <- names(w)[w]
  df <- MeanFrameMelt[ MeanFrameMelt$id %in% w2, ]
  print(ggplot(df, aes(x=variable, y=value, colour=id)) + geom_point() +
    scale_colour_discrete(drop=FALSE) + 
    ylim(range(MeanFrameMelt$value))
  )
}

答案 2 :(得分:0)

根据Rstudio的示例条形图,我发现了一件事:

manipulate(
   barplot(as.matrix(longley[,factor]), 
           beside = TRUE, main = factor),
   factor = picker(1,2,2:3))

如果您选择第三个选项2:3,它将绘制两组数据。据推测,可以在其他绘图类型中使用相同类型的技巧。我有兴趣看看别人能想出什么。

更新:以下作品虽然有点笨拙:

manipulate(matplot(foo[,1],foo[,c(which(c(fp2,fp3)==1))],t='l'), 
           fp2 = checkbox(TRUE,'col2') ,
           fp3 = checkbox(TRUE,'col3'))

如果您希望每个评论有3个复选框,则需要fp4行。

注意 - 我在Rstudio论坛上发布了一个问题,因为我在尝试将复选框输出分配给向量时收到了错误消息,即fpick[4]=checkbox(TRUE,'col4')