使用动态数据框的列名称作为图的y值

时间:2019-01-24 16:11:39

标签: r

我的数据框如下:

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

请注意,我的实际数据集具有这种形式

enter image description here

因为变量在-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之外的变量AT1AT2,因为它来了在处理另一个数据帧之后。例如,它可能包括AT1AT2AT4或仅包含AT2。例如,如果我在此处添加add_trace(y = ~AT2, name = 'AT2', line = list(color = 'red', width = 4)) %>%,则由于AT3不存在,情节将中断。在图中,我手动将这些变量设置为y,但是我正在寻找一种方法来自动识别我在数据框中具有的变量并将它们用作yenter image description here

1 个答案:

答案 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"))

结果:

enter image description here

在您作为图像提供的数据上运行相同的代码(使用这些列名):

enter image description here