我正在尝试使用躲避的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()
因此,我指定要使用的group
美学:
ggplot(df, aes(x = depth, y = values, color = treatment)) +
geom_point() +
geom_line(aes(group = sample))
但是,我的真实案例包含更多数据,而且处理方式重叠。我希望避开处理方法,以更好地显示每种处理程序的值:
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))
这是根据先前指定的geom_point()
美观度来回避color
,但使用geom_line()
美观度(已经设置为group
来回避group = sample
。
从本质上讲,问题在于position_dodge()
似乎优先使用group
美学,而且我发现在不更改为geom_path()
的情况下无法闪避线条。这样一来,我无需指定group
的美感就可以得出第二个数字,但是我更喜欢不使用它,因为它要求数据帧必须井井有条(并且我还没有设法使用我的实数-世界数据集。)
有没有geom_line()
个解决方案?
答案 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创建