【发布时间】:2021-02-09 23:54:33
【问题描述】:
我正在使用 R 编程语言。使用以下代码,我能够创建两个交互式图表:
library(dplyr)
library(ggplot2)
library(shiny)
library(plotly)
library(htmltools)
library(dplyr)
#generate data
set.seed(123)
var = rnorm(731, 100,25)
date= seq(as.Date("2014/1/1"), as.Date("2016/1/1"),by="day")
data = data.frame(var,date)
vals <- 90:100
combine <- vector('list', length(vals))
count <- 0
for (i in vals) {
data$var_i = i
data$new_var_i = ifelse(data$var >i,1,0)
#percent of observations greater than i (each month)
aggregate_i = data %>%
mutate(date = as.Date(date)) %>%
group_by(month = format(date, "%Y-%m")) %>%
summarise( mean = mean(new_var_i))
#combine files together
aggregate_i$var = i
aggregate_i$var = as.factor(aggregate_i$var)
count <- count + 1
combine[[count]] <- aggregate_i
}
result_1 <- bind_rows(combine)
result_1$group = "group_a"
result_1$group = as.factor(result_1$group)
gg <-ggplot(result_1, aes(frame = var, color = group)) + geom_line(aes(x=month, y=mean, group=1))+ theme(axis.text.x = element_text(angle=90)) + ggtitle("graph1")
gg = ggplotly(gg)
######
var = rnorm(731, 85,25)
date= seq(as.Date("2014/1/1"), as.Date("2016/1/1"),by="day")
data = data.frame(var,date)
vals <- 90:100
combine <- vector('list', length(vals))
count <- 0
for (i in vals) {
data$var_i = i
data$new_var_i = ifelse(data$var >i,1,0)
#percent of observations greater than i (each month)
aggregate_i = data %>%
mutate(date = as.Date(date)) %>%
group_by(month = format(date, "%Y-%m")) %>%
summarise( mean = mean(new_var_i))
#combine files together
aggregate_i$var = i
aggregate_i$var = as.factor(aggregate_i$var)
count <- count + 1
combine[[count]] <- aggregate_i
}
result_2 <- bind_rows(combine)
result_2$group = "group_b"
result_2$group = as.factor(result_2$group)
gg1 <-ggplot(result_2, aes(frame = var, color = group)) + geom_line(aes(x=month, y=mean, group=1))+ theme(axis.text.x = element_text(angle=90)) + ggtitle("graph2")
gg1 = ggplotly(gg1)
我的问题:是否可以将这些图表配置为:如果您为其中一个图表“移动滑块”,另一个图表的滑块也会移动?
我想出了如何让滑块移动两条线,前提是它们在同一个图表上:
final = rbind(result_1, result_2)
graph <-ggplot(final, aes(frame = var, color = group)) + geom_line(aes(x=month, y=mean, group=1))+ theme(axis.text.x = element_text(angle=90)) + ggtitle("title")
graph = ggplotly(graph)
但我正在寻找一种方法,如果您将“图表 1”的滑块移动一定距离,“图表 2”的滑块也会移动相同的距离 - 反之亦然。这可能吗?从这里开始,我将使用plotly::subplot() 语句或htmltools:taglist() 并将结果保存为html 文件。
(从长远来看,我想要 4 个图:graph1、graph2 一起移动,graph3、graph4 一起移动)
谢谢
【问题讨论】:
-
您是否考虑过在一个 ggplot2 对象中将两个图形放在不同的方面?例如。通过将
+ facet_grid(~group)添加到graph,然后将其转换为情节对象。然后,您可以使用相同的滑块控制两个方面面板。 -
感谢您的建议!我会试试这个!
-
我刚试过。有效!谢谢!
-
我发布了您的答案,以防其他人想查看完整的解决方案。如果您想发布它,请告诉我,我可以删除它。感谢您的所有帮助