我的数据框如下:
year<-c(2017,2018,2019)
AT1<-c(200,100,0)
AT2<-c(10,100,0)
DT<-data.frame(year,AT1,AT2)
year AT1 AT2
1 2017 200 10
2 2018 100 100
3 2019 0 0
请注意,我的实际数据集具有这种形式
因为变量在-1到12之间 基于此数据框,我在下面创建此图:
library(plotly)
plot_ly(DT, x = ~factor(year), y = ~AT1, name = 'AT1', type = 'scatter', mode = 'lines',
line = list(color = 'rgb(205, 12, 24)', width = 4)) %>%
add_trace(y = ~AT2, name = 'AT2', line = list(color = 'red', width = 4)) %>%
layout(title = "Day 10 Enrollments",
xaxis = list(title = "Years"),
yaxis = list (title = "Count"))
问题在于,我用于绘图的DT
数据框可能并不总是包含-除years
之外的变量AT1
和AT2
,因为它来了在处理另一个数据帧之后。例如,它可能包括AT1
,AT2
和AT4
或仅包含AT2
。例如,如果我在此处添加add_trace(y = ~AT2, name = 'AT2', line = list(color = 'red', width = 4)) %>%
,则由于AT3
不存在,情节将中断。在图中,我手动将这些变量设置为y
,但是我正在寻找一种方法来自动识别我在数据框中具有的变量并将它们用作y
。
答案 0 :(得分:3)
gather
AT列:
DT<-tidyr::gather(DT,"AT", "value", -year)
现在,我们使用一个事实,即根据name
变量自动拆分数据,以便为每个组创建不同的迹线:
plot_ly(DT, x = ~year, y = ~value, name = ~AT, type = 'scatter', mode = 'lines',
line = list(width = 4)) %>%
layout(title = "Day 10 Enrollments",
xaxis = list(title = "Years"),
yaxis = list (title = "Count"))
结果:
在您作为图像提供的数据上运行相同的代码(使用这些列名):