簡體   English   中英

使用來自 R-plotly 包的 plot_ly 的動態圖

[英]dynamical plot using plot_ly from R-plotly package

我正在使用plot_lyplot_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_lyadd_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 `!

聽起來你是在正確的軌道上。 您可以使用meltfilter來創建具有所需列名的數據框,如下面的代碼。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM