行作为系列 Plotly R

Rows As Series Plotly R

我有一个数据框:

df<-data.frame(Level=c("Small","Bigger","Biggest"),Threshold1=c(0.9,.8,.7),Threshold2=c(0.4,.5,.6),Threshold3=c(.6,.2,.1))

我想生成如下图形,但使用 plotly:

您将如何读入情节并实现这一目标?

我尝试使用 t() 进行旋转并查看了 plotly 文档,但没有看到任何关于将行用作系列并将标识符列的值用作系列名称的方法。

在我的真实数据中,Level 列中可以存在的值的数量可能会发生变化,因此理想情况下,我想找到一个可以随任何数量的值扩展的解决方案 Level 可能包括。

非常感谢任何帮助!

使用data.table会更简单:

library(data.table)
library(plotly
df<-data.table(Level=c("Small","Bigger","Biggest"),Threshold1=c(0.9,.8,.7),Threshold2=c(0.4,.5,.6),Threshold3=c(.6,.2,.1))

d <-melt.data.table(df, id.vars='Level')
plot_ly(d, x=~variable, y=~value,type = 'scatter', mode = 'lines',  color = ~Level)

您应该获得所需的图表。

基于 R 的解决方案:

library(plotly)

df<-data.frame(Level=c("Small","Bigger","Biggest"),
               Threshold1=c(0.9,.8,.7),Threshold2=c(0.4,.5,.6),Threshold3=c(.6,.2,.1))

df.reshaped <- reshape(df, varying = c("Threshold1", "Threshold2", "Threshold3"), 
                            v.names = "Values", idvar = "Level", direction = "long", 
                            times = c("Threshold1", "Threshold2", "Threshold3"), 
                            new.row.names = 1:(3 * nrow(df)))

plot_ly(df.reshaped, x=~time, y=~Values, type = 'scatter', mode = 'lines',  color = ~Level)

输出图: