r - 使用 R-plotly 包中的 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
模型`!
解决方案
听起来你在正确的轨道上。您可以使用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"))
推荐阅读
- java - Java中的空格和换行符是否被视为一个字节?
- scala - 使用 scala 获取数据框中每个类别的列的最大分钟数
- matlab - Matlab动态绘图轴
- ospf - 我应该在核心交换机还是边缘交换机上启用 OSPF?
- asp.net - 在 HTML 表格标签中使用 AngularJS ng-repeat-start 和 ng-repeat-end 的同一实体的嵌套循环
- asp.net - Akka.net 异步方法处理
- mysql - MySQL 语句在更新中使用 group_concat
- python - 我在 Django 应用程序中同一类的两个对象之间存在 OneToOne 关系。是否可以强制执行这种关系的唯一性?
- c# - 如何将默认参数添加到asp.net mvc中的属性路由
- embed - 如何在不使用小部件的情况下将公共 instagram 提要嵌入网站?