R 当变量/列数始终不同时,使用plotly打印折线图

R 当变量/列数始终不同时,使用plotly打印折线图,r,data.table,plotly,r-plotly,line-plot,R,Data.table,Plotly,R Plotly,Line Plot,我想使用以下数据表创建一个线形图(只是一个反例): dt% 添加跟踪(y=~dt$Austria,name=dt[,3], 行=列表(颜色=“#007d3c”,宽度=3,破折号='点'))%>% 添加_跟踪(y=~dt$Czechia, 行=列表(颜色=“#b4”,宽度=3,破折号='破折号'), name=dt[,4])%>% 布局(title=“Coal”,xaxis=列表(title=“Date”), yaxis=list(title=“EUR/MWh”),showlegend=FALSE

我想使用以下数据表创建一个线形图(只是一个反例):

dt%
添加跟踪(y=~dt$Austria,name=dt[,3],
行=列表(颜色=“#007d3c”,宽度=3,破折号='点'))%>%
添加_跟踪(y=~dt$Czechia,
行=列表(颜色=“#b4”,宽度=3,破折号='破折号'),
name=dt[,4])%>%
布局(title=“Coal”,xaxis=列表(title=“Date”),
yaxis=list(title=“EUR/MWh”),showlegend=FALSE)
基本上一切都按预期工作,但我的数据表从来都不必这样。第一列(
date
)始终保持不变,但每个附加列有时可能有不同的名称。此外,可能是数据表在
dt
中的列数多于或少于上述数据表。我仍然希望创建一个线条图来匹配这些场景。例如,表可能(在选择其他输入后)有以下列:

日期|德国|荷兰

或者:日期|奥地利|斯洛文尼亚|丹麦

此外,如果使用相应的列名,而不是
跟踪0
跟踪1
等,那就太好了


这将如何工作?

对于这样的场景,最佳做法是通过
melt.data.table将
数据表
从宽格式转换为长格式:

library(plotly)
library(data.table)


DT <- data.table(date = seq(as.Date('2020-01-01'), by = '1 day', length.out = 365),
                 Germany = rnorm(365, 2, 1), Austria = rnorm(365, 3, 4), 
                 Czechia = rnorm(365, 2, 3), check.names = FALSE)


DT <- melt.data.table(DT, id.vars = "date")

p <- plot_ly(DT, x = ~ date, y = ~ value, color = ~ variable, mode = 'lines', type = 'scatter',
             connectgaps = TRUE, name = DT[, 2],
             hovertemplate = paste("%{xaxis.title.text}:  %{x}<br>",
                                   "%{y} \u20ac/MWh <br>")) %>%
  layout(title = "<b>Coal", xaxis = list(title = "Date"), 
         yaxis = list(title = "EUR/MWh"), showlegend = FALSE)

p
library(plotly)
库(数据表)
DT%
布局(title=“Coal”,xaxis=列表(title=“Date”),
yaxis=list(title=“EUR/MWh”),showlegend=FALSE)
P

p <- plot_ly(dt, x = ~dt$date, y = ~dt$Germany, mode = 'lines', type = 'scatter', 
             line = list(color = "#007d3c"), 
             connectgaps = TRUE, name = dt[, 2],
             hovertemplate = paste("%{xaxis.title.text}:  %{x}<br>",
                                   "%{y} \u20ac/MWh <br>")) %>%
     add_trace(y = ~dt$Austria, name = dt[, 3],
               line = list(color = "#007d3c", width = 3, dash = 'dot')) %>%
     add_trace(y = ~dt$Czechia, 
               line = list(color = "#b4b4b4", width = 3, dash = 'dash'), 
               name = dt[, 4]) %>%
     layout(title = "<b>Coal", xaxis = list(title = "Date"), 
            yaxis = list(title = "EUR/MWh"), showlegend = FALSE)
library(plotly)
library(data.table)


DT <- data.table(date = seq(as.Date('2020-01-01'), by = '1 day', length.out = 365),
                 Germany = rnorm(365, 2, 1), Austria = rnorm(365, 3, 4), 
                 Czechia = rnorm(365, 2, 3), check.names = FALSE)


DT <- melt.data.table(DT, id.vars = "date")

p <- plot_ly(DT, x = ~ date, y = ~ value, color = ~ variable, mode = 'lines', type = 'scatter',
             connectgaps = TRUE, name = DT[, 2],
             hovertemplate = paste("%{xaxis.title.text}:  %{x}<br>",
                                   "%{y} \u20ac/MWh <br>")) %>%
  layout(title = "<b>Coal", xaxis = list(title = "Date"), 
         yaxis = list(title = "EUR/MWh"), showlegend = FALSE)

p