在R的高聊框中显示y轴上的所有组

问题描述 投票:0回答:1

我想知道如何为这样的数据集(df)创建一个包含在y轴上每个id的所有观察值的高位图图表:

id  time    value
1   6:00    1
1   12:00   0
1   18:00   0
1   0:00    1
2   6:00    1   
2   12:00   1
2   18:00   1
2   0:00    0
3   6:00    0
3   12:00   0
3   18:00   0
3   0:00    1

我能够创建一个图表来显示各个ID的观察结果,但我想将其结合起来。

首选结果将是这样:

1| *                   *
2| *     *       *     
3|                     *
  6:00  12:00  18:00  0:00

有什么方法可以做到这一点?非常感谢。

r highcharts
1个回答
1
投票

我最终能够通过为每个组分配不同的值来创建所需的聊天,即[id:1,value:3],[id:2,value; 2]。

原始df:

id  time    value
1   6:00    1
1   12:00   0
1   18:00   0
1   0:00    1
2   6:00    1   
2   12:00   1
2   18:00   1
2   0:00    0
3   6:00    0
3   12:00   0
3   18:00   0
3   0:00    1

由于id = 1应该位于图表的顶部,所以我为其分配了最大值,然后下降到具有最小值的最后一个id。

df$value <- ifelse(df$id == "1", 3, df$value)
df$value <- ifelse(df$id == "2", 2, df$value)
df$value <- ifelse(df$id == "3", 1, df$value)

更新的df:

1   6:00    3
1   12:00   0
1   18:00   0
1   0:00    3
2   6:00    2   
2   12:00   2
2   18:00   2
2   0:00    0
3   6:00    0
3   12:00   0
3   18:00   0
3   0:00    1

每个组都可以拥有自己的列。想法是将每个ID放在单独的列中,因此可以轻松地将其作为一系列序列添加到图表中。对于此子集,可以使用合并:

df_one <- subset(df, id == "1")
df_one <- select(df_one, time, value)
colnames(df_one) <- c("time", "value1")
df_two <- subset(df, id == "2")
df_two <- select(df_two, time, value)
colnames(df_one) <- c("time", "value2")
df_three <- subset(df, id == "3")
df_three <- select(df_three , time, value)
colnames(df_one) <- c("time", "value3")

df_final <- merge(df_one, df_two, by = "time", all.x = TRUE)
df_final <- merge(df_final, df_three, by = "time", all.x = TRUE)

生成的最终df看起来像这样:

time  value1  value2  value3
6:00    3       2       0
12:00   0       2       0
18:00   0       2       0
0:00    3       0       1

然后可以将其添加到图表中:

hc <- highchart() %>% 
  hc_chart(type = "scatter") %>% 
  hc_xAxis(categories = df$time) %>% 
  hc_add_series(data = c(df$value1),
                name = "Id: 1"
                ) %>%
  hc_add_series(data = c(df$value2),
                name = "Id: 2"
                ) %>%
  hc_add_series(data = c(df$value3),
                name = "Id: 3"
                ) %>%
hc_exporting(enabled = TRUE)
hc
© www.soinside.com 2019 - 2024. All rights reserved.