【问题标题】:dynamical plot using plot_ly from R-plotly package使用 R-plotly 包中的 plot_ly 进行动态绘图
【发布时间】:2019-11-18 18:16:02
【问题描述】:

我正在使用闪亮和plot_ly 来绘制data frame

目标:根据GUI中的用户选择实现动态绘图。

考虑以下名为pl.ddata.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_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 asmodel`!!

【问题讨论】:

    标签: r shiny r-plotly


    【解决方案1】:

    听起来你是在正确的轨道上。您可以使用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")))来绘制所有列

    【讨论】:

    • 感谢您的回答。我在问题中回复你!
    • 非常感谢。我的错是,我使用了颜色=〜模型,我不得不使用,正如你所说的〜变量!但为什么呢?
    • 看看data %&gt;% melt()的输出,默认情况下,它会创建一个名为variable的列和一个名为value的列。
    猜你喜欢
    • 1970-01-01
    • 2021-02-11
    • 2021-06-29
    • 1970-01-01
    • 2020-12-23
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多