web-dev-qa-db-fra.com

Dessine une boîte autour d'une légende ggplot2

J'ai créé un tracé avec une légende personnalisée dans ggplot2. J'ai essayé de dessiner une boîte autour de tous les éléments de la légende, mais je ne pouvais dessiner qu'une boîte autour de chaque élément individuel. Comment puis-je créer une seule boîte autour de tous les articles?

library(ggplot2)

ggplot(mpg, aes(displ, cty)) + 
  geom_point(aes(shape = "Data")) +
  stat_smooth(aes(linetype = "Regression"), method = "lm", 
              formula = y ~ x, se = FALSE, colour = 1, size = 0.5) +
  scale_shape_manual(values = 1) +
  labs(shape = "", linetype = "") +
  theme_classic() + 
  theme(panel.border = element_rect(colour = "black", fill=NA),
        aspect.ratio = 1, axis.text = element_text(colour = 1, size = 12),
        legend.background = element_rect(linetype = 2, size = 0.5, colour = 1))

enter image description here

12
Daniel Valencia C.

Il semble que le rectangle legend.background Chevauche le rectangle legend.box.background. Une solution simple consiste à définir legend.background = element_blank().

Mais alors, à mon avis, l'espacement dans la légende est moche. Les titres de légende prennent trop de place même sans jeu de titres. Corrigez cela en définissant legend.title = element_blank(). De plus, l'espacement entre les deux légendes est trop important. Corrigez cela en définissant l'espace à zéro legend.spacing.y = unit(0, "mm")

library(ggplot2)

ggplot(mpg, aes(displ, cty)) + 
  geom_point(aes(shape = "Data")) +
  stat_smooth(aes(linetype = "Regression"), method = "lm", 
              formula = y ~ x, se = FALSE, colour = 1, size = 0.5) +
  scale_shape_manual(values = 1) +
  labs(shape = "", linetype = "") +
  theme_classic() + 
  theme(legend.title = element_blank(),
        legend.spacing.y = unit(0, "mm"), 
        panel.border = element_rect(colour = "black", fill=NA),
        aspect.ratio = 1, axis.text = element_text(colour = 1, size = 12),
        legend.background = element_blank(),
        legend.box.background = element_rect(colour = "black"))

enter image description here

12
Sandy Muspratt