【发布时间】:2021-06-16 08:56:41
【问题描述】:
使用 plotly 库,我在 R 中制作了以下绘图:
library(dplyr)
library(ggplot2)
library(plotly)
set.seed(123)
df <- data.frame(var1 = rnorm(1000,10,10),
var2 = rnorm(1000,5,5))
df <- df %>% mutate(var3 = ifelse(var1 <= 5 & var2 <= 5, "a", ifelse(var1 <= 10 & var2 <= 10, "b", "c")))
plot = df %>%
ggplot() + geom_point(aes(x=var1, y= var2, color= var3))
ggplotly(plot)
这是一个简单的散点图 - 生成两个随机变量,然后点的颜色由某些标准决定(例如,如果 var1 和 var2 在特定范围内)。
从这里,我还可以汇总统计数据:
df$var3 = as.factor(df$var3)
summary = df %>%
group_by(var3) %>%
summarize(Mean_var1 = mean(var1), Mean_var2 = mean(var2), count=n())
# A tibble: 3 x 4
var3 Mean_var1 Mean_var2 count
* <fct> <dbl> <dbl> <int>
1 a -1.70 0.946 158
2 b 4.68 4.94 260
3 c 15.8 6.49 582
我的问题:是否可以在此图中添加一些按钮,以允许用户根据自定义选择为点着色?例如。像这样:
现在,用户可以在他们想要的任何范围内输入 - 点的颜色会发生变化,并且会生成一些摘要统计信息。
谁能告诉我如何在 R 中做到这一点?
我有这个想法 - 首先我会创建一个巨大的表,它会创建“var1”和“var2”的所有可能范围组合:
vec1 <- c(-20:40,1)
vec2 <- c(-20:40,1)
a <- expand.grid(vec1, vec2)
for (i in seq_along(vec1)) {
for (j in seq_along(vec2)) {
df <- df %>% mutate(var3 = ifelse(var1 <= i & var2 <= i, "a", ifelse(var1 <= j & j <= 10, "b", "c")))
}
}
然后,根据用户想要的范围 - SQL 风格的语句将这些行从对应于这些范围的海量表中分离出来:
custom_df = df[df$var1 > -20 & df$var1 <10 & df$var1 > -20 & df$var2 <10 , ]
然后,将对“custom_df”进行单独的抓取,并为“custom_df”记录汇总统计信息:
summary = custom_df %>%
group_by(var3) %>%
summarize(Mean_var1 = mean(var1), Mean_var2 = mean(var2), count=n())
但我不确定如何在 R 中巧妙而有效地做到这一点。
有人可以告诉我怎么做吗?
谢谢
【问题讨论】:
-
您在
shiny寻找解决方案吗? -
最初我试图只使用 plotly 来解决这个问题 - 但现在我认为这只能使用闪亮来解决。我正在尝试从这个网站 (mastering-shiny.org/action-dynamic.html) 学习一些基本的闪亮知识。你有什么建议?
-
这可能需要一些努力,这可能是目前还没有答案的原因。如果您没有得到答案,您也可以选择筹集小额赏金以让更多人关注它
-
这些链接真的很有用。如果你自学,对回答这些问题会有很大帮助
-
谢谢,现在可能会得到更多关注