R中的情节:有许多线条的情节选择框

时间:2016-10-13 06:51:55

标签: r plotly

我正在尝试在R中的plot_ly中创建一个有许多行的图。我希望能够使用选择工具。一个例子如下:

library(plotly)

trace_0 <- rnorm(100, mean = 0)
trace_1 <- rnorm(100, mean = 0)
trace_2 <- rnorm(100, mean = 0)
x <- c(1:100)

data <- data.frame(x, trace_0, trace_1, trace_2)

plot_ly(data, x = ~x, y = ~trace_0, name = 'trace 0', type = 'scatter', mode = 'lines') %>%
  add_trace(y = ~trace_1, name = 'trace 1', mode = 'lines') %>%
  add_trace(y = ~trace_2, name = 'trace 2', mode = 'lines') 

基于这个例子,我在根据我的目标定制它时有两个问题:

1)在上面的例子中,数据的维度是100行和4列。假设我有一个100行50列的数据框。是否有更好的方法来添加每个新行(通过add_trace),还是需要在for-loop中为49行添加?

2)有没有办法我仍然可以获得“选择”选项。有时,当使用plot_ly时,会出现一个框和套索选择工具。但是,出于某种原因,我默认情况下无法得到这个情节。

如果您对这些目标有任何建议,我将非常感谢您的意见!谢谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试:

library(plotly)
library(reshape2)
# some reproducible data
d <- cbind.data.frame(x=1:nrow(iris), iris[,-5])
  x Sepal.Length Sepal.Width Petal.Length Petal.Width
1 1          5.1         3.5          1.4         0.2
2 2          4.9         3.0          1.4         0.2
3 3          4.7         3.2          1.3         0.2
4 4          4.6         3.1          1.5         0.2
5 5          5.0         3.6          1.4         0.2
6 6          5.4         3.9          1.7         0.4
# transform to long format using reshape's melt() function  
d_long <- melt(d, id.vars ="x" )
# plot the lines using the group argument for different traces.
plot_ly(d_long, x=  x, y=value, group= variable, type= "line")

enter image description here

第二个问题的解决方案可能是dragmode。将以下值中的一个添加到绘图中:

c("zoom", "pan", "select", "lasso", "orbit", "turntable")
plot_ly(d_long, x=  x, y= value, group= variable, type= "line") %>%
  layout(dragmode = "lasso")

同时检查plotly website上的布局参考。但我不确定图标是否

修改

最新的情节版本plotly_4.5.2稍微改变了语法。现在,您必须为行图指定type"scatter""scattergl"以及mode"line"。 group参数将按颜色或group_by()设置。不幸的是,没有"lasso""select&#34;完全在行模式下运行。因此,您必须使用"lines+markers"模式。使用dragmode,您可以指定预先选择的功能。

plot_ly(d_long, x=  ~x, y= ~value, type = 'scatter', mode = 'lines+markers', color = ~variable)  %>% layout(dragmode="lasso")

enter image description here

答案 1 :(得分:0)

试试这个:

p<-plot_ly(y=trace_0, x=x , evaluate=TRUE)
p<-add_trace(y=trace_1, x=x , evaluate=TRUE)
p<-add_trace(y=trace_2, x=x , evaluate=TRUE)
p

enter image description here