[英]dynamical plot using plot_ly from R-plotly package
我正在使用plot_ly
和plot_ly
來繪制data frame
。
目標:根據用戶在GUI
的選擇實現動態圖。
考慮以下data.table
命名pl.d
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 as
color=~Variable as mentioned in the answer! BUT why? I set it in my data frame as
color=~Variable as mentioned in the answer! BUT why? I set it in my data frame as
`!
聽起來你是在正確的軌道上。 您可以使用melt
和filter
來創建具有所需列名的數據框,如下面的代碼。
data = data.frame(Group = c("a","b","c"),os = c(1,2,3),np = c(4,5,6), ws = c(7,8,9))
plot_cols = function(data, column_names = colnames(data)){
data%>%
melt()%>%
filter(variable %in% column_names) %>%
plot_ly(x = ~Group,y = ~value,color = ~variable,type = "bar")
}
您可以通過調用plot_cols(data)
或任何選擇列(如plot_cols(data,"os")
或plot_cols(data,c("os","ws"))
來繪制所有列
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.