2015-05-06 13 views
5

Considerate questo semplice ggplot:Come posso controllare le dimensioni della tela in ggplot?

enter image description here

ho disegnato un bordo nero su di esso, quindi è più facile immaginare quanto sia grande.

Non capisco perché questa trama sia così grande. Non c'è niente nel mio codice che dice a ggplot che voglio un'area sopra o sotto la trama.

Questo mi sembra ogni volta. Come posso controllare le dimensioni della tela in ggplot?

library(ggplot2) 

hex=c("#CC0000", "#90BD31", "#178CCB")  

q <- ggplot(data=NULL) 
    q <- q + geom_rect(data=NULL, aes(xmin=0, xmax=1, ymin=0.5, ymax=1.5), fill=hex[1]) 
    q <- q + geom_rect(data=NULL, aes(xmin=1.5, xmax=2.5, ymin=0.5, ymax=1.5), fill=hex[2]) 
    q <- q + geom_rect(data=NULL, aes(xmin=3, xmax=4, ymin=0.5, ymax=1.5), fill=hex[3]) 
    q <- q + annotate("text", x=.5, y=0.1, label='Impaired', size=4) 
    q <- q + annotate("text", x=2, y=0.1, label='Normal', size=4) 
    q <- q + annotate("text", x=3.5, y=0.1, label='Optimal', size=4) 
    q <- q + coord_fixed() 
    q <- q + theme_classic() 
    q <- q + theme(axis.line=element_blank(), 
        axis.text.x=element_blank(), 
        axis.text.y=element_blank(), 
        axis.ticks=element_blank(), 
        axis.title.x=element_blank(), 
        axis.title.y=element_blank(), 
        panel.background=element_blank(), 
        panel.border=element_blank(), 
        panel.grid.major=element_blank(), 
        panel.grid.minor=element_blank(), 
        plot.background=element_blank()) 
    q 
+0

Ho sempre trovato che la chiave per ottenere tela coerente e tutte le altre dimensioni è quello di controllare l'output grafico dispositivo direttamente. Apritene uno con png(), pdf() o altro preferito e specificate le dimensioni in pixel, cm o pollici nell'output più adatto alle vostre esigenze. Qualsiasi ulteriore aiuto richiederebbe un esempio completamente riproducibile con dati, che non hai fornito sopra (esadecimale). –

+0

mi dispiace per l'esagono 'mancante' ... lo aggiungerò. Sono d'accordo con te. Quello che non ho menzionato, è che questo ggplot si sta abituando ad una app Shiny. Quindi non posso controllare il dispositivo di output grafico in un modo altrimenti ragionevole come hai suggerito. PS a parte l'hex, tutto dovrebbe essere riproducibile. –

+0

Sia 'shiny :: plotOutput' che' shiny :: renderPlot' prendono argomenti di altezza e larghezza ... – Gregor

risposta

5

utilizzando il ggplot2 plot.margin and/or panel.margin theme options si dovrebbe essere in grado di controllare i margini interni, una volta che hai adeguatamente impostare le dimensioni di uscita della tela. Questo certamente lavorerà per i normali dispositivi grafici e dovrebbe funzionare anche all'interno dell'applicazione lucido:

library(ggplot2) 
library(grid) 

hex=c("#CC0000", "#90BD31", "#178CCB")  

q <- ggplot(data=NULL) 
    q <- q + geom_rect(data=NULL, aes(xmin=0, xmax=1, ymin=0.5, ymax=1.5), fill=hex[1]) 
    q <- q + geom_rect(data=NULL, aes(xmin=1.5, xmax=2.5, ymin=0.5, ymax=1.5), fill=hex[2]) 
    q <- q + geom_rect(data=NULL, aes(xmin=3, xmax=4, ymin=0.5, ymax=1.5), fill=hex[3]) 
    q <- q + annotate("text", x=.5, y=0.1, label='Impaired', size=4) 
    q <- q + annotate("text", x=2, y=0.1, label='Normal', size=4) 
    q <- q + annotate("text", x=3.5, y=0.1, label='Optimal', size=4) 
    q <- q + coord_fixed() 
    q <- q + theme_classic() 
    q <- q + theme(axis.line=element_blank(), 
        axis.text.x=element_blank(), 
        axis.text.y=element_blank(), 
        axis.ticks=element_blank(), 
        axis.title.x=element_blank(), 
        axis.title.y=element_blank(), 
        panel.background=element_blank(), 
        panel.border=element_blank(), 
        panel.grid.major=element_blank(), 
        panel.grid.minor=element_blank(), 
        plot.background=element_blank(), 
        plot.margin=unit(c(0,0,0,0), "cm"), 
        panel.margin=unit(c(0,0,0,0), "cm")) 
    q 

No margin output

Problemi correlati