Horizontal legend with title on top in ggplot

Viewed 4517

I am trying to put the title of the legend on top, whereas the values are distributed horizontally but I cannot. Any hints will be very appreciated.

The code below provides the graph below, but I don't have space on my graph so I need something like this:

Sex

Female Male

df1 <- data.frame(
  sex = factor(c("Female","Female","Male","Male")),
  time = factor(c("Lunch","Dinner","Lunch","Dinner"), levels=c("Lunch","Dinner")),
  total_bill = c(13.53, 16.81, 16.24, 17.42))

 lp1 <- ggplot(data=df1, 
          aes(x=time, y=total_bill, group=sex, shape=sex, colour=sex)) + 
  geom_line() + 
  geom_point() +
  theme_bw() +
  theme(
   legend.direction = "horizontal",
   ) +     
  scale_color_manual(values=c("#0000CC", "#CC0000"),
                     name = 'Gender') 
    lp1

enter image description here

1 Answers

Try this:

cols <- c("#0000CC", "#CC0000")

df1 %>%
  ggplot(aes(time, total_bill, group = sex, shape = sex, colour = sex)) +
  geom_line() +
  geom_point() +
  theme_bw() +
  scale_shape(
    guide = guide_legend(
      direction = "horizontal",
      title.position = "top"
    )
  ) +
  scale_color_manual(
    values = cols,
    name = "Gender",
    guide = guide_legend(
      direction = "horizontal",
      title.position = "top"
    )
  )

enter image description here

Related