trama ggplot2 senza assi, legende, ecc


139

Voglio usare la hexbin del bioconduttore (cosa che posso fare) per generare un diagramma che riempia l'intera regione di visualizzazione (png) - niente assi, niente etichette, niente sfondo, niente nuthin '.


1
Non sarebbe più semplice creare un grafico hexbin e ritagliarlo in un editor di immagini?
joran,

3
provaretheme_void()
Brian D

Risposte:


182

Secondo il mio commento nella risposta di Chase, puoi rimuovere molte di queste cose usando element_blank:

dat <- data.frame(x=runif(10),y=runif(10))

p <- ggplot(dat, aes(x=x, y=y)) + 
        geom_point() +
        scale_x_continuous(expand=c(0,0)) + 
        scale_y_continuous(expand=c(0,0))   

p + 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(),legend.position="none",
          panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
          panel.grid.minor=element_blank(),plot.background=element_blank())

Sembra che ci sia ancora un piccolo margine attorno al bordo del .png risultante quando lo salvo. Forse qualcun altro sa come rimuovere anche quel componente.

(Nota storica: dalla versione 0.9.2 di ggplot2opts è stata deprecata. Utilizzare invece theme()e sostituire theme_blank()con element_blank().)


1
Grazie molto! Ho anche trovato una soluzione simile su groups.google.com/group/ggplot2/browse_thread/thread/…
user1320487

Commento di passaggio: in alcuni casi, theme(axis.ticks=element_blank())non funziona così come theme(axis.ticks.x=element_blank()), probabilmente, un bug temporaneo da qualche parte (ho il mio set di temi, quindi provo a scavalcare: solo axis.ticks.xe axis.ticks.yfaccio il lavoro.)
PatrickT

106

Ri: cambiando le opzioni in tema ecc. (Per gente pigra):

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(),
      legend.position="none",
      panel.background=element_blank(),
      panel.border=element_blank(),
      panel.grid.major=element_blank(),
      panel.grid.minor=element_blank(),
      plot.background=element_blank())

59

Le risposte attuali sono incomplete o inefficienti. Ecco (forse) il modo più breve per raggiungere il risultato (usando theme_void():

data(diamonds) # Data example
ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) +
      theme_void() + theme(legend.position="none")

Il risultato è:

inserisci qui la descrizione dell'immagine


Se sei interessato a eliminare le etichette , labs(x="", y="")fai il trucco:

ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) + 
      labs(x="", y="")

ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) + theme_void() + theme(legend.position="none", panel.background = element_rect(fill="grey80"), plot.background = element_rect(fill="red"))suggerisce che non è vuoto al 100%
baptiste il

I lab (x = "", y = "") non sembrano rimuovere gli assi, ma solo le etichette.
miratrix,

@miratrix scusa, errore mio. Aggiornato.
Luchonacho,

5
@luchonacho Usando labs(x="",y="")lascia spazio ai titoli degli assi perché in realtà ci sono titoli, sono semplicemente senza segni. Per rimuovere i titoli degli assi e lo spazio per loro è meglio usare+ theme(axis.title = element_blank())
Didzis Elferts

6
labs(x = NULL)o xlab(NULL)sono altri modi.
PatrickT

42
'opts' is deprecated.

in ggplot2 >= 0.9.2uso

p + theme(legend.position = "none") 

6
Mi rendo conto che non hai ancora i privilegi di modifica, ma se trovi altre mie risposte a ggplot2 che devono essere aggiornate re: opts () sentiti libero di suggerire una modifica. Riceverò una notifica e posso incorporarla da solo.
joran,

3
xy <- data.frame(x=1:10, y=10:1)
plot <- ggplot(data = xy)+geom_point(aes(x = x, y = y))
plot
panel = grid.get("panel-3-3")

grid.newpage()
pushViewport(viewport(w=1, h=1, name="layout"))
pushViewport(viewport(w=1, h=1, name="panel-3-3"))
upViewport(1)
upViewport(1)
grid.draw(panel)

Error in UseMethod("grid.draw") : no applicable method for 'grid.draw' applied to an object of class "NULL"
Roman Luštrik,

grid.ls () visualizza l'elenco di oggetti viewport e grob
amaurel,

sembra che in altre versioni di ggplot che sto usando il nome del pannello sia diverso
amaurel,

xy <- data.frame (x = 1: 10, y = 10: 1) grafico <- ggplot (data = xy) + geom_point (aes (x = x, y = y)) pannello grafico = grid.get (" panel-3-4 ") grid.newpage () pushViewport (viewport (w = 1, h = 1, name =" layout ")) pushViewport (viewport (w = 1, h = 1, name =" panel-3- 4 ")) upViewport (1) upViewport (1) grid.draw (panel)
amaurel

-1

Questo fa quello che vuoi?

 p <- ggplot(myData, aes(foo, bar)) + geom_whateverGeomYouWant(more = options) +
 p + scale_x_continuous(expand=c(0,0)) + 
 scale_y_continuous(expand=c(0,0)) +
 opts(legend.position = "none")

elimina la legenda ma gli assi xey e la griglia di sfondo sono ancora lì.
user1320487
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.