R 在变化的绘图动画中映射颜色
我想生成一个plot\u ly plot,在这里我使用按钮更改plot的内容。 如果我定义单个轨迹的颜色(如下所示),这一切都很好:R 在变化的绘图动画中映射颜色,r,plotly,R,Plotly,我想生成一个plot\u ly plot,在这里我使用按钮更改plot的内容。 如果我定义单个轨迹的颜色(如下所示),这一切都很好: 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 <
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",
args = list("visible", list(F,T,F)),
label = 'Fe'),
list(method = "rescale",
args = list("visible", list(F,F,T)),
label = 'In')
))))
Mn让我们试试这个。希望它在你的R上也能起作用
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, T, F, F, F, F, F, F, T, F, F)),
label = 'Mn'),
list(method = "rescale",
args = list("visible", list(F, F, F, T, T, T, F, F, F, F, T, F)),
label = 'Fe'),
list(method = "rescale",
args = list("visible", list(F, F, F, F, F, F, T, T, T, F, F, T)),
label = 'In')
))))
p%
添加_标记(y=~Mn)%>%
添加_标记(y=~Fe,visible=F)%>%
添加_标记(y=~In,可见=F)%>%
布局(
updatemenus=列表(
名单(
yanchor=“自动”,
按钮=列表(
列表(method=“rescale”,
args=list(“可见”,list(T,T,T,F,F,F,F,F,F,T,F,F)),
标签='Mn'),
列表(method=“rescale”,
args=list(“可见”,list(F、F、F、T、T、F、F、F、F、T、F)),
标签='Fe'),
列表(method=“rescale”,
args=list(“可见”,list(F,F,F,F,F,T,T,T,F,F,F,T)),
标签='In')
))))
诀窍在于args=list(“可见”,list(T,F,F))
。假设有三个层,因为有三个图。但每一种颜色或阶段也是一层。所以实际上你必须在“可见”参数中定义12层。因此,您需要args=list(“可见”,list(T、T、T、F、F、F、F、F、T、F、F))
前三层(T/F)是第一个图中的三个阶段,后三层是第二个图中的阶段。接下来的三层是第三个情节的三个阶段。每个图至少有三层
因此args=list(“可见”,list(T,T,T,F,F,F,F,T,F,F))
意味着显示第一个图中的三个阶段(T,T,T),不显示第二个和第三个图中的三个阶段(F,F,F,F,F),并显示第一个图的标记,但不显示第二个和第三个图(T,F,F,F)
编辑:我刚刚发现,您可能不必为绘图指定最后三个图层。如果只指定九个阶段就足够了,这样就可以删除最后三个逻辑。效果很好。感谢我的最后一个情节,我有14个不同的“样本”,也就是说有14种不同的颜色。在那里,可见的论点变得相当混乱,但它是有效的。
p <- plot_ly(df) %>%
add_markers(x=~n, y = ~Mn, visible = F, color = ~name) %>%
add_markers(x=~n, y = ~Fe, visible = F, color = ~name) %>%
add_markers(x=~n, y = ~In, visible = F, color = ~name) %>%
layout(
updatemenus = list(
list(
yanchor = 'auto',
buttons = list(
list(method = "rescale",
args = list("visible", list(T, F,F)),
label = 'Mn'),
list(method = "rescale",
args = list("visible", list(F,T,F)),
label = 'Fe'),
list(method = "rescale",
args = list("visible", list(F,F,T)),
label = 'In')
))))
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, T, F, F, F, F, F, F, T, F, F)),
label = 'Mn'),
list(method = "rescale",
args = list("visible", list(F, F, F, T, T, T, F, F, F, F, T, F)),
label = 'Fe'),
list(method = "rescale",
args = list("visible", list(F, F, F, F, F, F, T, T, T, F, F, T)),
label = 'In')
))))