简体   繁体   中英

Add linetype to geom_segment legend

Aim : add the linetypes of the segments to the legend, as well as the colour.

Problem : only the colour is showing.

Data :

m = as.data.frame(matrix(c(1:10), ncol = 2, nrow = 10))

Plot :

ggplot(m, aes(v1,v2)) + geom_segment(aes(x = 0, xend = 9.75, y = 10, yend = 10, colour = "PEL"), linetype = "dotted") + geom_segment(aes(x = 0, xend = 9.75, y = 5, yend = 5, colour = "AL1"), linetype = "longdash") + geom_segment(aes(x = 0, xend = 9.75, y = 2, yend = 2, colour = "ISQG"), linetype = "solid") + scale_colour_manual("legend", values = c("PEL" = "black", "AL1" = "blue", "ISQG" = "purple"), guide = guide_legend(override.aes = list(alpha = 1))) + theme(legend.position = "bottom")

I've tried adding scale_linetype_manual(values = c("PEL" = "dotted", "AL1" = "longdash", "ISQG" = "solid") but nothing changes.

This answer is similar, Legend linetype in ggplot but I couldn't figure out how to make it work with geom_segment

Thank you in advance

The most ggplot-esque way of doing this, is to include a linetype variable as part of mapping in the aes() functions. You must then ensure that both the linetype and colour scales have the same titles, breaks, limits, labels etc.

Alternatively, you can also include the linetype in the override.aes part of guide_legend() .

library(ggplot2)

ggplot() + 
  geom_segment(
    aes(x = 0, xend = 9.75, y = 10, yend = 10, colour = "PEL", linetype ="PEL"), 
  ) + 
  geom_segment(
    aes(x = 0, xend = 9.75, y = 5, yend = 5, colour = "AL1", linetype ="AL1"), 
  ) + 
  geom_segment(
    aes(x = 0, xend = 9.75, y = 2, yend = 2, colour = "ISQG", linetype = "ISQG"), 
  ) + 
  scale_colour_manual(
    "legend", 
    values = c("PEL" = "black", "AL1" = "blue", "ISQG" = "purple"), 
  ) + 
  scale_linetype_manual(
    "legend", 
    values = c("PEL" = "dotted", "AL1" = "longdash", "ISQG" = "solid"), 
  ) + 
  theme(legend.position = "bottom")

Created on 2022-05-19 by the reprex package (v2.0.1)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM