[英]r plotly update button with line plot does not work with add_markers
我对可更新行的连接 plot 和 R plotly 中的 static 标记有问题。行 plot 通过下拉菜单按钮更新,它本身运行良好。 add_markers function 中的附加点在 plot 首次初始化时也是正确的。
但是在第一次更新之后,标记被切断(到行开始的 plot 的左侧)并修改剩余的标记(y 值与初始值不同)。
对于此处的示例,简化了按钮 function,但结果显示了相同的奇怪行为。
`
sample_df <- tibble::tibble(quarter_date = rep(c("2022-06-30","2022-09-30","2022-12-31"),3),
forecast_value = runif(9,min = 10,max = 16),
forecast_date = c(rep("2022-07-23",3),rep("2022-08-26",3),rep("2022-09-15",3)))
marks = tibble::tibble(dates = c("2022-05-21","2022-06-15","2022-07-02","2022-07-26","2022-08-27"),
values = c(11,13,12,15,14))
create_buttons <- function(df, date_id) {
lapply(
date_id,
FUN = function(date_id,df) {
button <- list(
method = 'restyle',
args = list('y', list(df %>%
dplyr::filter(forecast_date == date_id) %>%
dplyr::pull(forecast_value))),
label = sprintf('Forecast @ %s', date_id)
)
},
df
)
}
plotly::plot_ly(x = ~quarter_date) %>%
plotly::add_trace(data = sample_df %>%
dplyr::filter(forecast_date == max(forecast_date)),
#x = ~period_date,
y = ~forecast_value,
type = 'scatter',
mode = 'markers+lines',
name = 'forecasts') %>%
plotly::layout(
title = "Drop down menue",
yaxis = list(title = "y"),
updatemenus = list(
list(
y =1,
x = 0.9,
buttons = create_buttons(sample_df, unique(sample_df$forecast_date))
)
)) %>%
plotly::add_markers(data = marks,
x = ~dates,
y = ~values)
`
我试图设置一个宽 xrange,使用第二个 y2 轴和按钮计算中的不同方法,但没有按预期工作。
有谁知道为什么在更新 plot 行后 add_markers 无法正常工作? 任何想法都非常感谢!
添加标记不是问题。 问题来自重新设计。 当您重新设置restyle
的样式而没有指定您只想更改一条迹线时,您更改了所有迹线。
解决方案实际上非常简单,您只需要在args
调用中多一个参数——列表中的跟踪号:在本例中为list(0)
。 我已经注释掉了您原来的args
调用,因此您可以看到更改。
为了使其可重复,我在创建
sample_df
之前添加了set.seed(46)
。
create_buttons <- function(df, date_id) {
lapply(
date_id,
FUN = function(date_id, df) {
button <- list(
method = 'restyle',
args = list('y', list(df %>% filter(forecast_date == date_id) %>%
pull(forecast_value)), list(0)),
# args = list('y', list(df %>%
# filter(forecast_date == date_id) %>%
# pull(forecast_value))),
label = sprintf('Forecast @ %s', date_id)
)
},
df
)
}
现在,当您运行 plot 时,您将看到您的标记数据仍然可见。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.