2012-12-31 10 views
6

come ridurre lo spazio tra due guide in un grafico. Nell'esempio seguente, le due guide sono tratte da una scala di colori e dimensioni e voglio cambiare il divario tra le due in modo che il titolo "dimensione" sia proprio sotto il punto di leggenda per 1. Design-saggio, potrebbe non essere senso in questo esempio, ma nella mia effettiva applicazione lo fa.Distanza minore tra due legende in un grafico (ad esempio scala di colori e dimensioni)

df=data.frame(x=rnorm(100),y=rnorm(100),color=factor(rbinom(100,1,0.5)),size=runif(100)) 
ggplot(df,aes(x=x,y=y,color=color,size=size)) + geom_point() 

Modifica: Ecco la trama. Mi piacerebbe rendere il divario evidenziato dalla linea verde e la freccia più piccola.

enter image description here

+0

Stai parlando di ciò che sono chiamati 'scale' sia in lattice e la terminologia ggplot, o sono i tuoi riferendosi a 'leggende'? –

+0

Sto parlando delle leggende a sinistra della trama chiamata "colore" e "dimensione" nella trama dell'esempio. Voglio avvicinarmi di più a due. – user2503795

+0

definisci meglio il problema, ma possibile duplicato? :/http://stackoverflow.com/questions/11366964/is-there-a-way-to-change-the-spacing-between-legend-items-in-ggplot2 –

risposta

5

Ho provato a giocare a personalizzare legend o guide parametri ma non riesco a trovare una soluzione. Spero di dare una soluzione usando le impostazioni di ggplot2.

Qui 2 soluzioni basate sui pacchetti gtable e grid.

per la soluzione gtable, il codice è ispirato a questo question.

enter image description here

library(gtable) 
    # Data transformation 
    data <- ggplot_build(p) 
    gtable <- ggplot_gtable(data) 
    # Determining index of legends table 
    lbox <- which(sapply(gtable$grobs, paste) == "gtable[guide-box]") 
    # changing the space between the 2 legends: here -0.5 lines 
    guide <- gtable$grobs[[lbox]] 
    gtable$grobs[[lbox]]$heights <- unit.c(guide$heights[1:2], 
            unit(-.5,'lines'), ## you can the GAP here 
            guide$heights[4:5]) 
    # Plotting 
    grid.draw(gtable) 

simile utilizzando il pacchetto grid (abbiamo ridisegnare nella vista della leggenda)

pp <- grid.get('guide',grep=T) 
depth <- downViewport(pp$wrapvp$name) 
guide <- grid.get('guide',grep=T) 
grid.rect(gp=gpar(fill='white')) 
guide$heights <- unit.c(guide$heights[1:2],unit(-0.2,'lines'),guide$heights[4],unit(0.1,'lines')) 
grid.draw(guide) 
upViewport(depth) 
+0

Grazie, lo so. La mia domanda è se c'è un'opzione per spostare le due guide/due legende per le dimensioni e la scala dei colori più vicine. – user2503795

+0

@ user1318686 Cosa succede se si aggiunge la risposta con un'immagine per mostrare il risultato finale? – agstudy

+0

Fatto. Mi piacerebbe rendere il divario evidenziato dalla linea verde e la freccia più piccola. – user2503795

8

Ora sembra che sia possibile utilizzando i parametri tema:

ggplot(df,aes(x=x,y=y,color=color,size=size)) + geom_point() + 
theme(legend.spacing.y = unit(-0.5, "cm")) 

Puoi anche provare a ridurre i margini della legenda s:

legend.margin = margin(-0.5,0,0,0, unit="cm") 

o più anziani

legend.margin=unit(0, "cm") 
Problemi correlati