我尝试使用dodged geom_line()来创建一个图形,但是我需要使用一个与aes(group)因子不同的因子来进行dodge。
这是我的问题的一个演练。
首先,生成一些数据:
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))
这会基于之前指定的color
美学来避开geom_point()
,但会使用其group
美学(已设置为group = sample
)来避开geom_line()
。
从本质上讲,问题是position_dodge()
似乎优先使用group
的美学,我没有找到任何方法来避开线条而不更改为geom_path()
。这允许我不指定group
美学来获得第二个图,但我更喜欢不使用,因为它需要 Dataframe 完全有序(我还没有设法使用我的真实世界数据集使其发挥作用)。
有没有geom_line()
解决方案?
2条答案
按热度按时间6kkfgxo01#
让每个
color
都是自己的geom_path
层,然后手动position_nudge
这些geom_path
层中的每个层,以与geom_point
层的position_dodge
匹配。lmyy7pcs2#
将
group = sample
移动到主ggplot
似乎可以做到这一点:创建于2019-11-20由reprex package(v0.3.0)