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.