如何在ggplot图例中调整点与线的堆叠顺序(绘图顺序不变)
问题说明
现在有一段ggplot代码,先画散点再画折线:
ggplot(mtcars)+ geom_point(aes(x=mpg,y=disp,color=factor(cyl)),fill='white',shape=21)+ geom_line(aes(x=mpg,y=disp,color=factor(cyl)))
因为绘图顺序是先点后线,图例里的折线会盖在散点上面。现在要保持先点后线的绘图顺序不变,只调整图例,让散点显示在折线上方,达到和先画折线再画散点的代码生成的图例一样的效果:
ggplot(mtcars)+ geom_line(aes(x=mpg,y=disp,color=factor(cyl)))+ geom_point(aes(x=mpg,y=disp,color=factor(cyl)),fill='white',shape=21)
解决办法
你可以通过自定义图例的绘制逻辑,让图例里先画折线再画散点,这样散点自然就会在折线上方。具体代码如下:
ggplot(mtcars)+ geom_point(aes(x=mpg,y=disp,color=factor(cyl)),fill='white',shape=21)+ geom_line(aes(x=mpg,y=disp,color=factor(cyl)))+ guides(color = guide_legend( key_glyph = function(data, params, size) { # 先绘制折线的图例标记 line_mark <- draw_key_path(data, params, size) # 再绘制散点的图例标记 point_mark <- draw_key_point(data, params, size) # 把两个标记组合,散点叠在折线上面 grid::grobTree(line_mark, point_mark) } ))
内容的提问来源于stack exchange,提问作者happysillycat
相关产品推荐
相关产品推荐

