R在同一时间序列x轴上的垂直堆栈图

时间:2019-03-21 09:55:42

标签: r ggplot2

我已经通过以下链接Stacking multiple plots,并且正在使用以下r命令。我正在获取4个堆栈的y轴和时间序列x轴的图形。

library(tidyverse)
library(reshape2)
dt$time <- seq(nrow(dt))
dt.df <- melt(dt, measure.vars = c("Time", "A", "B", "B_1", "C"))
ggplot(dt.df, aes(x = Time, y = value)) +
facet_grid(variable ~ ., scales = "free_y") +
theme(legend.position = "none") 

下面是示例数据框

Time        A       B       B_1     C
10:12:54    2376.2  1.462   3.462   48
10:12:55    2410    1.462   3.462   48
10:12:56    2400    1.462   3.462   48
10:12:57    2409    1.462   3.462   48.6
10:12:58    2400    1.462   3.462   48.6
10:12:59    2385.1  1.462   3.462   46.6
10:13:00    2400    1.462   3.462   46.6
10:13:01    2410    1.462   3.462   46.6
10:13:02    2400    1.462   3.462   46.6
10:13:03    2106    1.463   3.463   46.6
10:13:04    2406    1.463   3.463   44.8
10:13:05    2376.2  1.463   3.463   44.8
10:13:06    2406    1.463   3.463   44.8
10:13:07    2400    1.463   3.463   44.8

我想绘制垂直堆叠的A值, B和B_1值合并在一起和C值。但是问题是我无法在同一堆栈中合并B和B1曲线。 是否可以仅使一个堆栈具有2个列值,而将其他值作为一个单独的列值呢?我该怎么解决?

1 个答案:

答案 0 :(得分:1)

我认为关键是要在数据中添加另一列以指定构面。该列与变量列基本相同,不同之处在于“ B”和“ B_1”具有相同的值,并将它们放在同一构面上。

这里是一个使用gather而不是melt的示例。

library(tidyverse)
dt = read_table("Time        A       B       B_1     C
10:12:54    2376.2  1.462   3.462   48
10:12:55    2410    1.462   3.462   48
10:12:56    2400    1.462   3.462   48
10:12:57    2409    1.462   3.462   48.6
10:12:58    2400    1.462   3.462   48.6
10:12:59    2385.1  1.462   3.462   46.6
10:13:00    2400    1.462   3.462   46.6
10:13:01    2410    1.462   3.462   46.6
10:13:02    2400    1.462   3.462   46.6
10:13:03    2106    1.463   3.463   46.6
10:13:04    2406    1.463   3.463   44.8
10:13:05    2376.2  1.463   3.463   44.8
10:13:06    2406    1.463   3.463   44.8
10:13:07    2400    1.463   3.463   44.8")

dt.df = gather(dt, "variable", "value", -Time) %>%
  mutate(facets = variable,
         facets = if_else(variable == "B_1", "B", facets))

dt.df %>%
  ggplot(aes(x = Time, y = value, color = variable)) +
  geom_line() +
  facet_grid(facets ~ ., scales = "free_y")

enter image description here

在此示例数据中,您看不到“ B”或“ B_1”中的变化,因为当它们处于相同比例时,各自的变化太小。但这说明了解决问题的一种方法。我再次添加了图例,以便能够区分“ B”和“ B_1”。