web-dev-qa-db-fra.com

Fusionner 2 légendes de manière spécifique

J'ai un complot de mes données qui inclut à la fois un boxplot et une parcelle de points (données de MTCars pour l'illustration)

ggplot(mtcars,aes(x=factor(cyl), y=mpg), fill=factor(carb),shape=factor(vs))+
     geom_boxplot(data=subset(mtcars,am==1),aes(x = factor(cyl), y = mpg,fill=factor(carb),shape=factor(vs)),outlier.shape = NA, alpha = 0.85, width = .65, colour = "BLACK") +
      geom_point(data=subset(mtcars,am==1 & vs==1),aes(x = factor(cyl), y = mpg,fill=factor(carb),shape=factor(vs)),outlier.shape = NA,size=5,alpha=.4,shape=1, colour = "BLACK", position = position_dodge(width = 0.65)) 

mon objectif est pour là

  1. être une seule légende au lieu de deux légendes
  2. cela montre maintenant toutes les couleurs associées au remplissage (basé sur le carbs) et un seul élément qui explique ce que les cercles ouverts correspondent à (c'est-à-dire vs == 1).
  3. pour cet élément unique (qui correspond à Geom_Point) pour afficher un cercle ouvert (correspondant au cercle ouvert dans le graphique) et non à la norme comme son affichage actuellement.

toute aide sera fortement appréciée

2
user15791858

Retirez la forme esthétique de Geom_Boxplot. En outre, en général, il n'est pas nécessaire de spécifier couleur = "noir", car il s'agit de la valeur par défaut pour geom_boxplot (idem pour geom_point).

La version que je courais en ligne a jeté un avertissement concernant outlier.shape, alors j'ai supprimé ça.

Ajoutez une forme esthétique constante au point et à utiliser scale_shape_manual Pour définir votre forme (utilisez la forme = 21 si vous souhaitez remplir - votre code suggère ceci, ou la forme = 1, si vous ne le faites pas.). Lorsque vous supprimez le titre de légende, les légendes ont l'air assez "fusionné".

Cependant, pas sûr de ce que vous voulez dire exactement avec la "légende fusionnée". L'esprit montrant une sortie souhaitée?

library(ggplot2)

ggplot(mtcars,aes(x=factor(cyl), y=mpg), fill=factor(carb),shape=factor(vs))+
  geom_boxplot(data=subset(mtcars,am==1), aes(x = factor(cyl), y = mpg, fill=factor(carb)), alpha = 0.85, width = .65) +
  geom_point(data=subset(mtcars,am==1 & vs==1),aes(x = factor(cyl), y = mpg,fill=factor(carb), shape = "v = 1"), size=5, alpha=.4, position = position_dodge(width = 0.65)) +
  scale_shape_manual(NULL, values = 21)

enter image description here

1
tjebo