Come disegnare una trama vuota?


106

Devo fare una trama vuota. Questo è il meglio che ho potuto inventare.

plot(0, xaxt = 'n', yaxt = 'n', bty = 'n', pch = '', ylab = '', xlab = '')

Qualche soluzione più semplice?

PS: completamente vuoto, nessun asse ecc.

Risposte:


107

Che ne dici di qualcosa come:

plot.new()

@Adam, non so cosa intendi per "R corretta".
Joshua Ulrich

@ Joshua, scusa plot.new () funziona bene, non c'è bisogno di x11 (). ho detto R corretto perché pensavo che x11 () fosse parte della tua soluzione, ma funziona senza di essa.
Adam SO

1
@Adam x11()è un comando R multipiattaforma per aprire un nuovo dispositivo. Se hai un dispositivo aperto e chiami plot.new(), il dispositivo corrente verrà cancellato.
Joshua Ulrich

1
C'è un vantaggio x11()nell'over dev.new()? Il mio istinto è di andare con quest'ultimo per ospitare qualunque sia il dispositivo predefinito locale, ma non sono sicuro che sia come funzionano le cose.
Matt Parker

@ Matt: lo uso x11()per abitudine. Non sono esperto nella stampa in R ma dopo aver dato un'occhiata alla documentazione, dev.new()probabilmente sarebbe meglio.
Joshua Ulrich

63

Suggerisco che qualcuno abbia bisogno di creare una trama vuota per aggiungere alcuni grafici in seguito. Quindi, usando

plot(1, type="n", xlab="", ylab="", xlim=c(0, 10), ylim=c(0, 10))

puoi specificare i limiti degli assi del tuo grafico.


25

Questo è leggermente più semplice della tua soluzione originale:

plot(0,type='n',axes=FALSE,ann=FALSE)

Non c'è bisogno di aggiungere ann=FALSE, sarà comunque un'area vuota. Ma un'ottima soluzione, grazie!
MS Berends

22

Quanto segue non traccia nulla nella trama e rimarrà vuoto.

plot(NULL, xlim=c(0,1), ylim=c(0,1), ylab="y label", xlab="x lablel")

Ciò è utile quando si desidera aggiungere successivamente linee o punti all'interno di un forciclo o qualcosa di simile. Ricorda solo di modificare i valori xlime in ylimbase ai dati che desideri tracciare.

Come nota a margine : questo può essere utilizzato anche per Boxplot, grafici di violino e grafici di sciami. per quelli ricordati di aggiungere add = TRUEalla loro funzione at =di tracciamento e di specificare anche di specificare su quale numero vuoi tracciarli (il valore predefinito è l'asse x a meno che tu non abbia impostato horz = TRUEin queste funzioni.


17

Adam, seguendo il tuo commento sopra ("Volevo che il grafico vuoto servisse da riempitivo in un grafico multiplo (mfrow)."), Quello che vuoi veramente è l'opzione mfg

    par(mfg=c(row,column))

- che controlla dove vuoi mettere la trama successiva. Ad esempio, per mettere una trama nel mezzo di un multiplot 3x3, fai

    par(mfrow=c(3,3))
    par(mfg=c(2,2))
    plot(rnorm(10))

14

Hai bisogno di una nuova finestra del grafico e anche di un sistema di coordinate, quindi hai bisogno di plot.new()e plot.window(), quindi puoi iniziare ad aggiungere elementi grafici:

plot.new( )
plot.window( xlim=c(-5,5), ylim=c(-5,5) )

points( rnorm(100), rnorm(100) )
axis( side=1 )

trama di esempio


4

C'è un interesse per la tua soluzione che plot.new()però non ha: nella trama vuota che "disegni" puoi scrivere del testo alle coordinate specificate con text(x = ..., y = ..., your_text).


3
grid.newpage() ## If you're using ggplot

grid() ## If you just want to activate the device.

1
grid()non è correlato al pacchetto griglia AFAIK
baptiste

2

Se qualcuno sta cercando una ggplot2soluzione, puoi usare cowploto i patchworkpacchetti

library(ggplot2)

### examples from cowplot vignettes
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) +
  geom_point(size = 2.5)
plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) + 
  geom_bar() +
  theme(axis.text.x = element_text(angle = 0, vjust = 0.5))

library(cowplot)
### use NULL
plot_grid(plot.mpg, NULL, NULL, plot.diamonds,
  labels = c("A", "B", "C", "D"),
  ncol = 2
)

# Note: if you want to initialize an empty drawing canvas, use ggdraw() 

library(patchwork)
### use plot_spacer()
plot.mpg + plot_spacer() + plot_spacer() + plot.diamonds +
  plot_layout(ncol = 2) +
  plot_annotation(
    title = "Plot title",
    subtitle = "Plot subtitle",
    tag_levels = "A",
    tag_suffix = ")"
  )

Creato il 17/03/2019 dal pacchetto reprex (v0.2.1.9000)


1

Una trama vuota con alcuni testi che sono posizionati.

plot(1:10, 1:10,xaxt="n",yaxt="n",bty="n",pch="",ylab="",xlab="", main="", sub="")
mtext("eee", side = 3, line = -0.3, adj = 0.5)
text(5, 10.4, "ddd")
text(5, 7, "ccc")

Perché aggiungere del testo? Cosa c'entra questo con "Come creare una trama vuota?". Nel complesso, questo sembra più complicato del metodo OP nella domanda plot(0,xaxt='n',yaxt='n',bty='n',pch='',ylab='',xlab=''), dal momento che aggiungi main = "", sub = ""anche tu ottieni lo stesso risultato senza di loro.
Gregor Thomas
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.