如何在facet_grid的每个facet中重复特定的数据?

eeq64g8w  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(71)

我的数据集的第一列是日期/时间,其他5列包含来自5个传感器的测量结果。我想使用face_grid显示结果。Facet 1将包括2条曲线:传感器2和传感器1 Facet 2将包括2条曲线:传感器3和传感器1 Facet 3将包括2条曲线:传感器4和传感器1 Facet 4将包括2条曲线:传感器5和传感器1
我不知道如何将相同的传感器1数据添加到facet_grid的每个facet。有人知道如何做到这一点吗?我应该使用Pivot_longer吗?如果是这样,我在这一步之后仍然被阻止。
(the我正在寻找的解决方案必须使我能够显示图例中曲线的5种颜色)。
任何帮助都会很好。谢谢

5uzkadbs

5uzkadbs1#

我将在cyl上刻面mtcars,在所有三个刻面中重复cyl==8
我们需要做的是:

  • 复制cyl,以便我们可以使用一个用于着色,一个用于刻面
  • cyl == 8复制到其他组中,将其中一个cyl-列重写到目标cyl组中(与其他cyl s一起进行carpenter join)
  • 绘图,像通常一样分面,但使用一个cyl用于颜色,另一个用于分面
mt <- transform(mtcars, cyl_facet = cyl)
mt2 <- subset(mt, cyl_facet == 8, select = -cyl_facet) |> 
  # cartesian/outer join
  merge(data.frame(cyl_facet = c(4, 6)), by = c()) |> 
  rbind(mt)
ggplot(mt2, aes(disp, mpg, color = factor(cyl))) +
  geom_point() +
  facet_wrap(cyl_facet ~ .)

字符串
x1c 0d1x的数据

rseugnpd

rseugnpd2#

作为r2evans方法的一种变体,我们可以使用一个使用不带facet变量的数据的层(该数据将出现在所有facet上),以及一个使用facet变量的层--该数据将只出现在相应的facet上。

mtall <- transform(mtcars, cyl_facet = cyl)
mt8 <- subset(mtcars, cyl == 8)
ggplot() +
  geom_point(aes(disp, mpg, color = factor(cyl)), data = mt8) +
  geom_point(aes(disp, mpg, color = factor(cyl)), data = mtall) +
  facet_wrap(cyl_facet ~ .)

字符串
x1c 0d1x的数据

c0vxltue

c0vxltue3#

这与@r2evans的方法略有不同。首先,第一步就是将其调整为长。然后创建一个分面图,在其中放置要在所有分面中显示的类别。然后可以通过第二个geom_line添加后者(或geom_point或...)仅使用传感器1的数据的图层,其中重要的一步是重命名或删除分面所依据的列。这样,该图层将显示在各个方面。
使用一些伪造的随机示例数据:

library(ggplot2)
library(tidyr)
library(dplyr, warn = FALSE)

set.seed(123)
dat <- data.frame(
  Date = 1:10
)
dat[paste0("sensor", 1:5)] <- lapply(1:5, \(x) runif(10))

dat_long <- dat |>
  pivot_longer(-Date, names_to = "sensor")

ggplot(
  filter(dat_long, sensor != "sensor1"),
  aes(Date, value, color = sensor)
) +
  geom_line() +
  geom_line(
    data = filter(dat_long, sensor == "sensor1") |>
      rename(sensor1 = sensor),
    aes(color = sensor1)
  ) +
  facet_wrap(~sensor)

字符串
x1c 0d1x的数据

相关问题