2010-06-01 17 views
44

J'essaie de créer un tracé ggplot2 avec la légende sous l'intrigue. Le livre ggplot2 dit à la p. 112 "La position et la justification des légendes sont contrôlées par le paramètre theme.text.position, et la valeur peut être droite, gauche, haut, bas, none (aucune légende), ou numérique. position". Le code suivant fonctionne (puisque "right" est la valeur par défaut), et il fonctionne aussi avec "none" comme position de légende, mais "left", "top", "bottom", tous échouent avec "Error" dans grid.Call.graphics ("L_setviewport", pvp, TRUE): emplacement non-fini et/ou la taille de fenêtre »Comment déplacer ou positionner une légende dans ggplot2

library(ggplot2) 
(myDat <- data.frame(cbind(VarX=10:1, VarY=runif(10)), 
    Descrip=sample(LETTERS[1:3], 10, replace=TRUE))) 
qplot(VarX,VarY, data=myDat, shape=Descrip) + 
    opts(legend.position="right") 

Qu'est-ce que je fais mal? Re-positionner une légende doit être incroyablement commun, alors je me dis que c'est moi.

Répondre

39

Dans les versions> 0.9.3 (quand opts a été dépréciée)

theme(legend.position = "bottom") 

Ancienne version:

Malheureusement, il est un bug dans ggplot2 que j'espère vraiment vraiment corriger cet été .

Mise à jour:

Le bug impliquant opts(legend.position = "left") a été corrigé en utilisant la version la plus récente de ggplot2. En outre, la version 0.9.0 a vu l'introduction de guide_legend et guide_colorbar qui permettent un contrôle beaucoup plus fin sur l'apparence et le positionnement des éléments dans la légende elle-même. Par exemple, la capacité spécifie le nombre de lignes et de colonnes pour les éléments de légende.

+0

est-il pas fait maintenant avec 'theme_update (legend.position = « bottom ») '? –

3

Vous pouvez toujours placer la légende manuellement - mais comme l'étiquette est toujours empilée/verticale, elle a l'air moche. J'espère vraiment que le temps de hadley trouve résoudre ce problème :-)

p <- qplot(VarX,VarY, data=myDat, shape=Descrip) + 
opts(legend.position=c(.5,0.9),plot.margin = unit(c(6,0,0,0), "lines")) 
+9

' opts() 'est maintenant obsolète - utilisez' guide_legend() 'à la place http://docs.ggplot2.org/0.9.2.1/guide_legend.html – Andrew

0

Dans les versions les plus récentes de ggplot2, vous pouvez utiliser + theme(legend.position='bottom').

qplot(VarX,VarY, data=myDat, shape=Descrip) + 
    theme(legend.position='bottom') 

enter image description here

Voir Cookbook for R - Legends pour le bien plus de légendes.

En réponse à un commentaire, theme_update() ne se déclenche pas s'il est invoqué au milieu d'un ggplot (comme dans + theme_update(), seulement les fois suivantes.) Il modifie également le thème actif plutôt que le tracé spécifique. ceci:.

theme_update(legend.position='bottom') 
qplot(VarX,VarY, data=myDat, shape=Descrip) 

avec les résultats ci-dessus, la différence étant que les parcelles suivantes seront également par défaut la légende sur le fond

+0

avec le thème (légende.position = "bottom") ma légende apparaît en bas à gauche alors que dans votre exemple elle est montrée au milieu (comme je le pensais dans mes précédents graphiques au fil des ans). Savez-vous si quelque chose à ce sujet a changé et comment l'obtenir à nouveau au milieu? – Tingolfin