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