我已经通过以下链接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个列值,而将其他值作为一个单独的列值呢?我该怎么解决?
答案 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")
在此示例数据中,您看不到“ B”或“ B_1”中的变化,因为当它们处于相同比例时,各自的变化太小。但这说明了解决问题的一种方法。我再次添加了图例,以便能够区分“ B”和“ B_1”。