R:ggplot 有 6 个不同的组:有 5 条实线,一组有一条虚线

R: ggplot with 6 different groups: Have 5 solid lines and for one group a dashed line

我有以下数据:

structure(list(Date = c("01.08.2018", "02.08.2018", "03.08.2018", 
"04.08.2018", "01.09.2018", "02.09.2018", "03.09.2018", "04.09.2018", 
"01.08.2018", "02.08.2018", "03.08.2018", "04.08.2018", "01.09.2018", 
"02.09.2018", "03.09.2018", "04.09.2018", "01.08.2018", "02.08.2018", 
"03.08.2018", "04.08.2018", "01.09.2018", "02.09.2018", "03.09.2018", 
"04.09.2018"), Return = c(0.1, 0.4, 0.6, 0.2, 0.5, 0.3, 0.2, 
0.5, 0.2, 0.5, 0.2, 0.4, 0.5, -0.3, 1, -0.4, 0.4, 0.3, -0.3, 
0.2, 0.1, 0.3, 0.5, 0.6), Rating = c(1L, 1L, 2L, 2L, NA, NA, 
4L, 5L, 5L, 3L, 2L, NA, 2L, 1L, 1L, 1L, 2L, 2L, NA, 3L, 3L, 3L, 
4L, 4L)), class = "data.frame", row.names = c(NA, -24L))

我想使用 ggplot 绘制 Y 轴为 Return、X 轴为日期的绘图。图中的线条应来自 6 个不同的评级(1、2、3、4、5 和 NA)。如何将 NA Rating 的线更改为虚线并保持 Ratings 1 到 5 的其他线为实线?

我试过以下方法:

ggplot(Data, aes(x=`Date`, y=`Return`, group=`Rating`, fill=`Rating`, color=`Rating`)) + 
  geom_line(size=1) +
  scale_color_brewer(palette="Paired")

我的主要问题是如何获得评级为 NA 的组的虚线。我需要在代码中添加什么?

您可以将 Rating 放在 aeslinetype 中,然后使用 scale_linetype_manual 将 Na 设置为虚线:

Data <- Data %>%
  mutate(Rating = fifelse(is.na(Rating),"NA",as.character(Rating)))

ggplot(Data, aes(x= Date, y= Return,group = Rating, color= Rating,linetype = Rating)) + 
  geom_line(size=1) +
  scale_linetype_manual(breaks = c("NA",1:5),values = c("dashed",rep("solid",5)))