我正在尝试使用串扰(特别是使用 filter_checkbox 和 filter_select)为我的绘图图表添加一些交互性,但我遇到了一些障碍。我首先通过 ggplot 生成我的绘图,然后我使用 ggplot 函数将其转换为绘图。
虽然我可以很好地生成图表(并且降价有很多交互性),但我有几个问题。首先,当我希望过滤(通过 filter_select 或 filter_checkbox)时,“最近”数据会完全从图表中消失,并且如果不刷新 html 就无法恢复。我过滤的实际数据也会发生类似的事情。如果不刷新页面,我无法将图表恢复到原始状态。
有谁知道这可能是为什么?我的代码+数据的副本如下。
以下是我的数据片段(数据=历史):
structure(list(date = c("23-03-2019", "23-03-2019", "23-03-2019",
"23-03-2019", "05-05-2020", "05-05-2020", "05-05-2020", "05-05-2020",
"17-06-2021", "17-06-2021", "17-06-2021", "17-06-2021"), cumvol = c(0.004,
0.034, 0.054, 0.057, 0.005, 0.048, 0.068, 0.075, 2.009, 2.029,
2.049, 2.064), time = structure(c(26457, 26636, 26658, 27216,
25152, 25614, 25667, 25668, 56966, 57268, 57303, 58986), units = "secs", class = c("hms",
"difftime")), Year = c("2019", "2019", "2019", "2019", "2020",
"2020", "2020", "2020", "2021", "2021", "2021", "2021"))
在此之上,我从单独的 df (数据=最近)绘制另一条线。
structure(list(date = structure(c(19038, 19038, 19038, 19038), class = "Date"),
cumvol = c(0.029, 0.034, 0.07, 0.075), time = structure(c(29674, 29674, 29691, 29719),
class = c("hms", "difftime"), units = "secs")), Year = c("2022", "2022", "2022", "2022"))
然后我将数据转换为共享数据,使用该数据创建一个ggplot,然后将该图转换为ggplot,如下所示(变量“most_recent”指的是“最近”数据框中的最新条目,由最近[nrow(最近的),]):
sharedhistoric <- SharedData$new(historic, key = ~Date)
sharedrecent <- SharedData$new(recent, key = ~Date)
plot <- ggplot()+geom_line(data=sharedhistoric,aes(x=time, y=cumvol, group=date),color='#BAB0AC', alpha=0.5)+
geom_line(data=sharedrecent ,aes(x=time, y=cumvol, group=date),size=1.2,color='#E15758')+
geom_point(data=most_recent, aes(x=time,y=cumvol), color='#E15759',size=3)+geom_hline(yintercept = 0)+ theme(title=element_text(size=12),panel.background = element_rect(fill='white',color='black'),legend.position='right')+
labs(title = "Vol",subtitle = "Cum Vol so far", x = "Time", y = "Vol")
最后,我将图表转换为 plotly 并使用以下 bcols:
chartyplot <- plotly::ggplotly(plot)
bscols(widths = c(4, 9),
list(
crosstalk::filter_checkbox("Year",
label = "Select Year",
sharedhistoric,
group = ~Year),
crosstalk::filter_select("Date",
label = "Date",
sharedhistoric,
group = ~Date)
), chartyplot)
感谢您提供任何帮助/建议。