¿Cómo dibujar una trama vacía?

106

Necesito hacer una trama vacía. Esto es lo mejor que se me ocurrió.

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

¿Alguna solución más sencilla?

PD: completamente vacío, sin eje, etc.

Adam SO
fuente

Respuestas:

107

¿Qué tal algo como:

plot.new()
Joshua Ulrich
fuente
@ Adam, no sé qué quieres decir con "R propiamente dicha".
Joshua Ulrich
@Joshua, lo siento plot.new () funciona bien, no hay necesidad de x11 (). Dije R propiamente dicho porque pensé que x11 () era parte de su solución, pero funciona sin él.
Adam SO
1
@Adam x11()es un comando R multiplataforma para abrir un nuevo dispositivo. Si tiene un dispositivo abierto y llama plot.new(), se borrará el dispositivo actual.
Joshua Ulrich
1
¿Hay alguna ventaja para x11()terminar dev.new()? Mi instinto es optar por este último para adaptarse al dispositivo predeterminado local, pero no estoy seguro de que así sea como funcionan las cosas.
Matt Parker
@Matt: Lo uso x11()por costumbre. No soy un experto en trazar en R, pero después de echar un vistazo a la documentación, dev.new()probablemente sería mejor.
Joshua Ulrich
63

Sugiero que alguien necesite hacer un diagrama vacío para poder agregarle algunos gráficos más adelante. Entonces, usando

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

puede especificar los límites de los ejes de su gráfico.

Stukselbax
fuente
25

Esto es un poco más simple que su solución original:

plot(0,type='n',axes=FALSE,ann=FALSE)
Ben Bolker
fuente
No es necesario agregar ann=FALSE, de todos modos será un área vacía. Pero una gran solución, ¡gracias!
MS Berends
22

Lo siguiente no traza nada en la trama y permanecerá vacío.

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

Esto es útil cuando desea agregar líneas o puntos posteriormente dentro de un forbucle o algo similar. Solo recuerde cambiar los valores xlimy ylimsegún los datos que desea graficar.

Como nota al margen: esto también se puede utilizar para diagramas de caja, violín y enjambre. para aquellos, recuerde agregar add = TRUEa su función de trazado y también especificar at =para especificar en qué número desea trazarlos (el valor predeterminado es el eje x a menos que haya establecido horz = TRUEestas funciones.

Mehrad Mahmoudian
fuente
17

Adam, siguiendo su comentario anterior ("Quería que la trama vacía sirviera como relleno en una trama multiplot (mfrow)"), lo que realmente quiere es la opción mfg

    par(mfg=c(row,column))

- que controla dónde desea colocar la siguiente parcela. Por ejemplo, para poner una parcela en medio de una parcela de 3x3, haz

    par(mfrow=c(3,3))
    par(mfg=c(2,2))
    plot(rnorm(10))
Dag Hjermann
fuente
14

Necesita una nueva ventana de trazado y también un sistema de coordenadas, por lo que necesita plot.new()y plot.window(), luego, puede comenzar a agregar elementos de gráfico:

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

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

diagrama de ejemplo

por qué nudo
fuente
4

Sin plot.new()embargo, hay un interés en su solución que no lo ha hecho: en el gráfico vacío que "dibuja" puede escribir texto en coordenadas específicas text(x = ..., y = ..., your_text).

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

grid() ## If you just want to activate the device.
Brandon Bertelsen
fuente
1
grid()no está relacionado con el paquete grid AFAIK
baptiste
2

Si alguien está buscando una ggplot2solución, puede usar los paquetes cowplotopatchwork

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 = ")"
  )

Creado el 17-03-2019 por el paquete reprex (v0.2.1.9000)

Tung
fuente
1

Una trama vacía con algunos textos que se establecen en posición.

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")
Nick Dong
fuente
¿Por qué agregar texto? ¿Qué tiene eso que ver con "Cómo crear una parcela vacía?". En general, esto parece más complicado que el método de OP en la pregunta plot(0,xaxt='n',yaxt='n',bty='n',pch='',ylab='',xlab=''), ya que agrega main = "", sub = ""incluso obtiene el mismo resultado sin ellos.
Gregor Thomas