R ggplot优先处理线重叠

R ggplot优先处理线重叠,r,ggplot2,R,Ggplot2,在下面的图像中,红色的“违规”线被分割成若干段。我假设这是因为ggplot是按顺序绘制直线的,其中一条灰线是在红线之后绘制的,坐标相同。如何防止灰线与红线重叠 如其他stackoverflow问题所述,我将添加一行单独的内容,如下所示: library(tidyverse) mtcars %>% mutate(ID = row_number()) %>% select(ID, vs, am, gear, carb) %>% gather(key, value,

在下面的图像中,红色的“违规”线被分割成若干段。我假设这是因为ggplot是按顺序绘制直线的,其中一条灰线是在红线之后绘制的,坐标相同。如何防止灰线与红线重叠

如其他stackoverflow问题所述,我将添加一行单独的内容,如下所示:

library(tidyverse)
mtcars %>% 
  mutate(ID = row_number()) %>% 
  select(ID, vs, am, gear, carb) %>% 
  gather(key, value, 2:5) %>% 
  mutate(violation = c(rep(FALSE, 96), rep(TRUE, 32))) %>% 
  ggplot(aes(ID, value, group = key, color = violation)) + 
  scale_color_manual(values = c("grey", "red")) + 
  geom_line() + 
  theme_classic()
但当我的数据帧中没有冲突时,这会导致问题。我每月分析一次,有些月份包含违规行为,有些月份没有。如果我在上面加上这一行,我会得到一个错误,在没有违规的月份,长度必须大于0,所以这一行方法可能不起作用


与您的代码相比,您可能只需要对以下代码进行2个小的更改

geom_line(df %>% filter(violation == TRUE), aes(color = "red")) +
产生此图:

H 1的建议是改变线路图顺序的替代方法:

library(tidyverse)
mtcars %>% 
  mutate(ID = row_number()) %>% 
  select(ID, vs, am, gear, carb) %>% 
  gather(key, value, 2:5) %>% 
  mutate(violation = c(rep(FALSE, 96), rep(TRUE, 32))) %>% 
  ggplot(aes(ID, value, group = key, color = violation)) + 
  scale_color_manual(values = c("grey", "red")) + 
  geom_line(alpha = .5, size= 1.2) + ### changes in transparancy and thickness ###
  theme_classic()
这将生成以下绘图:


你有没有考虑过使用alpha来玩Transparance?这简直是一个骗局。添加…+aesgroup=revkey在这种情况下也适用。@H1我在下面的答案中添加了您的建议。我希望你能接受。
mtcars %>% 
  mutate(ID = row_number()) %>% 
  select(ID, vs, am, gear, carb) %>% 
  gather(key, value, 2:5) %>% 
  mutate(violation = c(rep(FALSE, 96), rep(TRUE, 32))) %>% 
  ggplot(aes(ID, value, group = key, color = violation)) + 
  scale_color_manual(values = c("grey", "red")) + 
  geom_line(aes(group = rev(key))) + ### changes sequence of plotting of the lines ###
  theme_classic()