我正在尝试使用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
答案 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')