【发布时间】:2019-11-18 18:16:02
【问题描述】:
我正在使用闪亮和plot_ly 来绘制data frame。
目标:根据GUI中的用户选择实现动态绘图。
考虑以下名为pl.d的data.table
Group OS NP own.OS own.SCR HY9 WS8
A 34 54 27 76 56 82
B 15 45 0 84 89 48
C 0 36 7 92 91 22
在我使用的server.R中
plot_ly(pl.d, x = ~Group, y = ~OS, type = 'bar', name = "OS" ) %>%
layout(showlegend = TRUE)
用户应该能够以 y 可以是c(OS, NP, own.OS, own.SCR, HY9, WS8) 的任意选择的方式扩展绘图。
一种不明智的可能方法是使用
plot_ly函数
if (input$choice of user =="NP"){
add_trace(y = ~NP, name = "NP")
}
还有if conditions等等。
是否有任何聪明的可能性可以编写智能动态代码来做到这一点?
它与“NP”无关。我的意思是plot_ly 或add_trace 原则上应该能够显示c(OS, NP, own.OS, own.SCR,HY9,WS8) 中的一个或多个。
我可以这样写:
plot_ly(pl.d, x = ~Group, y = ~OS, type = 'bar', name = "OS" ) %>%
add_trace(y = ~NP, name = "NP") %>%
add_trace(y = ~own.OS, name = "own.OS") %>%
add_trace(y = ~own.SCR, name = "own.SCR") %>%
add_trace(y = ~HY9, name = "HY9") %>%
add_trace(y = ~WS8, name = "WS8")%>%
layout(showlegend = TRUE)
问题:如果您省略了c(OS, NP, own.OS, own.SCR,HY9,WS8) 之一,则会出现错误!
一种可能的解决方案:将数据框拆分为向量!使用melt 函数使其成为可能,但是我没有得到向量只是另一种形状的数据表!请注意我的出发点是pl.d 和不是 data.frame(Group =c(...), ....)!
所以,我尝试了以下
pl.d<-data.frame(Group =melt(setDT(d.plot), id.var = 'Group ')[,1],
model=melt(setDT(d.plot), id.var = 'Group ')[,2],
value=melt(setDT(d.plot), id.var = 'Group ')[,3])
然后,
plot_ly(pl.d, x = ~Group, y = ~value, type = 'bar', color= ~model ) %>%
add_trace(y = ~value, name = "NP")
但是,我没有得到例如属于 A 的条彼此靠近。
附录:我的错误是,我使用了color= ~model,我必须使用color=~Variable as mentioned in the answer! BUT why? I set it in my data frame asmodel`!!
【问题讨论】: