我不确定这是否可能,但这是我想做的。我想plotly
通过从下拉菜单中选择来更新图中的数据。
作为一个简单的例子,假设我有一个数据框
df <- data.frame(x = runif(200), y = runif(200), z = runif(200))
我从中使用df$x
并df$y
在散点图中。我想使用下拉菜单实现两种数据操作场景:
- 替换
df$y
为df$z
- 仅绘制和的第一个
n
值df$x
df$y
我查看了以下两个示例,我可以轻松地复制它们: https ://plot.ly/r/dropdowns/
但是,我不知道如何根据下拉选择传递有关要绘制的数据的信息。对于场景 2,例如我已经尝试过它args = list("data", df[1:n,])
不起作用。
对于场景 1,(唯一?)方式(根据示例)似乎分别隐藏/显示痕迹。这也是方案 2 的唯一方法吗?
有什么替代的想法吗?
更新 1:添加可重现的示例
因此,这是一个示例,可以在场景 1 中实现我想要的。
require(plotly)
df <- data.frame(x = runif(200), y = runif(200), z = runif(200))
Sys.setenv("plotly_username"="xxx") #actual credentials replaced
Sys.setenv("plotly_api_key"="xxx") #actual credentials replaced
p <- plot_ly(df, x = df$x, y = df$y, mode = "markers", name = "A", visible = T) %>%
add_trace(mode = "markers", y = df$z, name = "B", visible = T) %>%
layout(
title = "Drop down menus - Styling",
xaxis = list(domain = c(0.1, 1)),
yaxis = list(title = "y"),
updatemenus = list(
list(
y = 0.7,
buttons = list(
list(method = "restyle",
args = list("visible", list(TRUE, TRUE)),
label = "Show All"),
list(method = "restyle",
args = list("visible", list(TRUE, FALSE)),
label = "Show A"),
list(method = "restyle",
args = list("visible", list(FALSE, TRUE)),
label = "Show B")))
))
plotly_POST(p)
此处的结果:https ://plot.ly/~spietrzyk/96/drop-down-menus-styling/ 这是基于 https://plot.ly/r/dropdowns/ 中的示例
但是,我想知道是否可以传递要绘制的数据,而不是触发visible
对单个迹线属性的更改。
我尝试过的一件事是:
p <- plot_ly(df, x = df$x, y = df$y, mode = "markers", name = "A", visible = T) %>%
layout(
title = "Drop down menus - Styling",
xaxis = list(domain = c(0.1, 1)),
yaxis = list(title = "y"),
updatemenus = list(
list(
y = 0.7,
buttons = list(
list(method = "restyle",
args = list("y", df$y),
label = "Show A"),
list(method = "restyle",
args = list("y", df$z),
label = "Show B")))
))
结果在这里:https ://plot.ly/~spietrzyk/98/drop-down-menus-styling/
这种方法不起作用,因为来自的数据df$z
没有发布到网格(https://plot.ly/~spietrzyk /99/ )。
所以我想知道是否有办法根据下拉选择来操纵要绘制的数据,而不是绘制所有轨迹,而不是visible
通过下拉选择来切换属性。