使用组美学以外的因素躲避geom_line()

时间:2019-11-20 16:07:20

标签: r ggplot2

我正在尝试使用躲避的geom_line()来制作人物,但我需要使用与aes(group)因子不同的因子来躲避它。

这是我的问题的逐步解答。

首先,生成一些数据:

require(tidyverse)

treatment <- c(rep("t1", 15),
               rep("t2", 15))
sample <- c(rep("a", 5),
            rep("b", 5),
            rep("c", 5),
            rep("d", 5),
            rep("e", 5),
            rep("f", 5))

depth <- rep(1:5, 6)
set.seed(112)
values <- rnorm(30)
df <- tibble(treatment, sample, depth, values)

数据的初始绘图:

ggplot(df, aes(x = depth, y = values, color = treatment)) +
  geom_point() +
  geom_line()

这将生成带有无意义线条的图: enter image description here

因此,我指定要使用的group美学:

ggplot(df, aes(x = depth, y = values, color = treatment)) +
  geom_point() +
  geom_line(aes(group = sample))

这会产生更好的数字。 enter image description here

但是,我的真实案例包含更多数据,而且处理方式重叠。我希望避开处理方法,以更好地显示每种处理程序的值:

ggplot(df, aes(x = depth, y = values, color = treatment)) +
  geom_point(position = position_dodge(width = 0.5)) +
  geom_line(aes(group = sample), position = position_dodge(width = 0.5))

enter image description here 这是根据先前指定的geom_point()美观度来回避color,但使用geom_line()美观度(已经设置为group来回避group = sample

从本质上讲,问题在于position_dodge()似乎优先使用group美学,而且我发现在不更改为geom_path()的情况下无法闪避线条。这样一来,我无需指定group的美感就可以得出第二个数字,但是我更喜欢不使用它,因为它要求数据帧必须井井有条(并且我还没有设法使用我的实数-世界数据集。)

有没有geom_line()个解决方案?

1 个答案:

答案 0 :(得分:0)

group = sample移入主ggplot似乎可以解决问题:

require(tidyverse)
#> Loading required package: tidyverse

treatment <- c(rep("t1", 15),
               rep("t2", 15))
sample <- c(rep("a", 5),
            rep("b", 5),
            rep("c", 5),
            rep("d", 5),
            rep("e", 5),
            rep("f", 5))

depth <- rep(1:5, 6)
set.seed(112)
values <- rnorm(30)
df <- tibble(treatment, sample, depth, values)

ggplot(df, aes(x = depth, y = values, color = treatment, group = sample)) +
  geom_point(position = position_dodge(width = 0.5)) +
  geom_line(position = position_dodge(width = 0.5))

reprex package(v0.3.0)于2019-11-20创建