R ggplot2图例:将不在绘图代码中的项目添加到图例&;在图例中更改形状

R ggplot2图例:将不在绘图代码中的项目添加到图例&;在图例中更改形状,r,plot,ggplot2,legend,R,Plot,Ggplot2,Legend,我有一个复杂的曲线图,显示了不同年份患者等级的不同颜色点,以及连接重复测量(相同患者)的不同颜色线,这两年患者等级发生了变化。正如您所见,图例只是列出了两种颜色的点和线。然而,我需要的是一个图例,2009年有一个红点,2016年有一个蓝点(没有线条!),还有一条红线可以标记为“升级”,一条蓝线可以标记为“降级”。所以我需要四个图例项:2个点,2条线,4个标签。我对此做了广泛的搜索,但没有找到答案 以下是我用来构建我想要的所有美学的情节代码: sampledata <- structure(

我有一个复杂的曲线图,显示了不同年份患者等级的不同颜色点,以及连接重复测量(相同患者)的不同颜色线,这两年患者等级发生了变化。正如您所见,图例只是列出了两种颜色的点和线。然而,我需要的是一个图例,2009年有一个红点,2016年有一个蓝点(没有线条!),还有一条红线可以标记为“升级”,一条蓝线可以标记为“降级”。所以我需要四个图例项:2个点,2条线,4个标签。我对此做了广泛的搜索,但没有找到答案

以下是我用来构建我想要的所有美学的情节代码:

sampledata <- structure(list(patient = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 
5L, 6L, 6L, 7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L, 11L, 11L, 12L, 
12L, 13L, 13L, 14L, 14L, 15L, 15L, 16L, 16L, 17L, 17L, 18L, 18L, 
19L, 19L), grade = structure(c(5L, 5L, 5L, 5L, 5L, 1L, 5L, 1L, 
1L, 5L, 1L, 5L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 5L, 2L, 5L, 3L, 3L, 
3L, 3L, 2L, 4L, 2L, 4L, 4L, 1L, 4L, 1L, 4L, 2L, 4L, 2L), .Label = c("grade_I", 
"grade_II", "grade_III", "indeterminate", "normal"), class = "factor"), 
year = c(2009L, 2016L, 2009L, 2016L, 2009L, 2016L, 2009L, 
2016L, 2009L, 2016L, 2009L, 2016L, 2009L, 2016L, 2009L, 2016L, 
2009L, 2016L, 2009L, 2016L, 2009L, 2016L, 2009L, 2016L, 2009L, 
2016L, 2009L, 2016L, 2009L, 2016L, 2009L, 2016L, 2009L, 2016L, 
2009L, 2016L, 2009L, 2016L)), .Names = c("patient", "grade", 
"year"), class = "data.frame", row.names = c(NA, -38L))

yearf = factor(year)

gradef = factor(gradef, levels=c("normal", "grade_I", "grade_II", "grade_III", "indeterminate"))

p <- ggplot(data=guidegrades2, aes(x=gradef, y=patient, group=patient, color=yearf)) + 
    geom_point() + geom_line()
p + scale_colour_brewer(palette = "Set1") + 
    labs(x = "ASE Grade", y = "Patient", color = "ASE Guidelines")

pticks = p + scale_x_discrete(labels=c("grade_I" = "Grade I", "grade_II" = "Grade II",
    "grade_III" = "Grade III", "indeterminate" = "Indeterminate", "normal" = "Normal"))

ptheme = pticks + theme(panel.grid.minor = element_blank(), panel.grid.major = element_blank(), panel.background = element_blank(), legend.key = element_rect(fill = "white"), axis.line = element_line(), axis.title.x=element_text(vjust=0.0001)) 

paxes = ptheme + scale_colour_brewer(palette = "Set1") + 
    labs(x = "ASE Grade", y = "Patient", color = "ASE Guidelines")

sampledata在没有看到数据的情况下很难确定,但有一个选项可能是:首先,使用具有单独边框和填充颜色的点标记。为此,从主ggplot调用中删除
color=yearf
,然后执行
geom_点(shape=21,aes(fill=yearf))
。这将为您提供一个填充圆作为点标记,以及一个没有线条的点图例。接下来,您需要在数据中创建一个新列,将其称为
grade\u change
,将每个患者标记为“升级”或“降级”。然后您可以执行
geom\u line(aes(颜色=等级变化))
。但是,作为线型(即,
linetype=grade\u change
)可能比作为颜色更好,因为您已经将颜色用于点标记。或者,可以使用点的形状和线的颜色。