如何解决在不断变化的plot_ly动画中映射颜色
我想生成一个plot_ly绘图,在其中使用按钮更改绘图的内容。 如果我为单个迹线定义颜色,如下所示,这一切都很好:
Mn <- rnorm(100,100,10)
Fe <- rnorm(100,20000,1000)
In <- rnorm(100,5000,400)
n <- c(1:100)
df <- tibble(n,Mn,Fe,In,)
df <- mutate(df,name=if_else(n < 30,"stage1",if_else(30<n & n<73,"stage2","stage3")))
p <- plot_ly(df,x= ~n) %>%
add_markers(y = ~Mn,visible = F) %>%
add_markers(y = ~Fe,visible = F) %>%
add_markers(y = ~In,visible = F) %>%
layout(
updatemenus = list(
list(
yanchor = 'auto',buttons = list(
list(method = "rescale",args = list("visible",list(T,F,F)),label = 'Mn'),list(method = "rescale",list(F,T,label = 'Fe'),T)),label = 'In')
))))
给出一个可以更改迹线的图。
现在,我想向数据添加更多信息,我想映射名称。只要我有一个静态图,例如:
p <- plot_ly(df) %>%
add_markers(x=~n,y = ~Mn,visible = T,color = ~name)
这看起来不错。
但是,如果我将颜色参数添加到“变化中”的图上,则根本不起作用。
p <- plot_ly(df) %>%
add_markers(x=~n,visible = F,color = ~name) %>%
add_markers(x=~n,y = ~Fe,color = ~name) %>%
add_markers(x=~n,y = ~In,color = ~name) %>%
layout(
updatemenus = list(
list(
yanchor = 'auto',buttons = list(
list(method = "rescale",label = 'In')
))))
现在,该按钮将更改阶段,而不再更改元素。 所以这里肯定有一些混淆。
解决方法
让我们尝试一下。希望它也可以在您的R上使用。
glue
诀窍在p <- plot_ly(df,x=~n,color = ~as.factor(name)) %>%
add_markers(y = ~Mn) %>%
add_markers(y = ~Fe,visible = F) %>%
add_markers(y = ~In,visible = F) %>%
layout(
updatemenus = list(
list(
yanchor = "auto",buttons = list(
list(method = "rescale",args = list("visible",list(T,T,F,F)),label = 'Mn'),list(method = "rescale",list(F,label = 'Fe'),T)),label = 'In')
))))
中。您假设有三层,因为有三幅图。但是每个 color 或舞台也是一个图层。因此,实际上您必须在“可见”参数中定义12层。因此,您需要args = list("visible",F))
。
前三个层(T / F)是第一个图中的三个阶段,接下来的三个层是第二个图中的阶段。接下来的三层是第三图中的三个阶段。而且每个情节至少有三层。
所以args = list("visible",F))
表示在图一中显示三个阶段(T,T,T),而不在图二和三中显示三个阶段(F,F,F,F,F,F)并显示第一个图的标记,但不显示第二个和第三个图(T,F,F)的标记。
编辑:我刚刚发现,您可能不必为绘图指定最后三层。只要仅指定九个阶段就足够了,因此可以删除最后三个逻辑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。