Nadia
Nadia

Reputation: 59

Change the vertical spacing of one legend in ggplot?

I'm plotting two sets of data in ggplot2 with code like the following, which leads to me having two legends (ignore the ugly plot, this is just an example)

x <- ggplot(mtcars)+
  theme_bw() +
    theme(legend.position=c(0.8, 0.8), legend.direction="horizontal", 
          legend.key.size=unit(0.008, "cm"), legend.title=element_blank(), 
          legend.margin=margin(), legend.spacing = unit(0.04, "cm")) +
    guides(colour = guide_legend(override.aes = list(size=6)), shape= guide_legend(override.aes = list(size=5))) +
    geom_point(aes(x=mpg, y=cyl, colour=cyl))+
    geom_point(aes(x=mpg, y = hp, shape=as.factor(carb)))

print(x)

ot

The issue is that for me, the black shapes in the bottom are vertically too close together, I would like the two rows of black shapes to have more vertical space between them. I tried to use legend.spacing.y but it did not help at all, it only changed the space between the two individual legends (for cyl and carb). I would like to know if there's some theme command that would let me do something like legend.spacing(legend=carb, unit(0.1, "cm")) so it specifically acts on the carb legend.

Thanks!

Upvotes: 1

Views: 6147

Answers (1)

Greg
Greg

Reputation: 3660

You can use the keyheight argument in guide_legend

ggplot(mtcars) +
  theme_bw() +
  theme(
    legend.position = c(0.8, 0.8),
    legend.direction = "horizontal",
    legend.key.size = unit(0.008, "cm"),
    legend.title = element_blank(),
    legend.margin = margin(),
    legend.spacing = unit(0.04, "cm")
  ) +
  guides(colour = guide_legend(override.aes = list(size = 6)),
         shape = guide_legend(override.aes = list(size = 5), keyheight = 2)) +
  geom_point(aes(x = mpg, y = cyl, colour = cyl)) +
  geom_point(aes(x = mpg, y = hp, shape = as.factor(carb)))

enter image description here

Upvotes: 3

Related Questions