Comment dessiner un tracé vide?

106

J'ai besoin de faire un complot vide. C'est le mieux que je puisse trouver.

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

Des solutions plus simples?

PS: complètement vide, pas d'axe etc.

Adam SO
la source

Réponses:

107

Que diriez-vous de quelque chose comme:

plot.new()
Joshua Ulrich
la source
@Adam, je ne sais pas ce que vous entendez par "R proprement dit".
Joshua Ulrich
@Joshua, désolé plot.new () fonctionne bien, il n'y a pas besoin de x11 (). J'ai dit R correct parce que je pensais que x11 () faisait partie de votre solution, mais cela fonctionne sans elle.
Adam SO
1
@Adam x11()est une commande R multiplateforme pour ouvrir un nouvel appareil. Si vous avez un appareil ouvert et appelez plot.new(), l'appareil actuel sera effacé.
Joshua Ulrich
1
Y a-t-il un avantage à x11()plus dev.new()? Mon instinct est d'aller avec ce dernier pour s'adapter à tout le périphérique local par défaut, mais je ne suis pas certain que ce soit comme ça que les choses fonctionnent.
Matt Parker
@Matt: J'utilise x11()par habitude. Je ne suis pas un expert du tracé en R mais après avoir jeté un coup d'œil à la documentation, ce dev.new()serait probablement mieux.
Joshua Ulrich
63

Je suggère que quelqu'un ait besoin de créer une intrigue vide afin d'y ajouter des graphiques plus tard. Donc, en utilisant

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

vous pouvez spécifier les limites des axes de votre graphique.

stukselbax
la source
25

C'est légèrement plus simple que votre solution d'origine:

plot(0,type='n',axes=FALSE,ann=FALSE)
Ben Bolker
la source
Pas besoin d'ajouter ann=FALSE, sera de toute façon une zone vide. Mais une excellente solution, merci!
MS Berends le
22

Ce qui suit ne trace rien dans l'intrigue et il restera vide.

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

Ceci est utile lorsque vous souhaitez ajouter des lignes ou des points par la suite dans une forboucle ou quelque chose de similaire. N'oubliez pas de modifier les valeurs xlimet en ylimfonction des données que vous souhaitez tracer.

En remarque: cela peut également être utilisé pour les parcelles Boxplot, Violin et Swarm Plots. pour ceux-ci, n'oubliez pas d'ajouter add = TRUEà leur fonction de traçage et de spécifier également at =sur quel nombre vous voulez les tracer (la valeur par défaut est l'axe des x sauf si vous avez défini horz = TRUEces fonctions.

Mehrad Mahmoudian
la source
17

Adam, suite à votre commentaire ci-dessus ("Je voulais que le tracé vide serve de remplissage dans un tracé multiplot (mfrow)."), Ce que vous voulez réellement, c'est l'option mfg

    par(mfg=c(row,column))

- qui contrôle où vous voulez placer le prochain tracé. Par exemple, pour placer un tracé au milieu d'un multiplot 3x3, faites

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

Vous avez besoin d'une nouvelle fenêtre de tracé, ainsi que d'un système de coordonnées, vous avez donc besoin de plot.new()et plot.window(), vous pouvez alors commencer à ajouter des éléments de graphique:

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

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

exemple de tracé

pourquoi.knot
la source
4

Il y a un intérêt pour votre solution qui plot.new()n'a pas cependant: dans le graphique vide que vous «dessinez», vous pouvez écrire du texte aux coordonnées spécifiées avec text(x = ..., y = ..., your_text).

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

grid() ## If you just want to activate the device.
Brandon Bertelsen
la source
1
grid()n'est pas lié au paquet de grille AFAIK
baptiste
2

Si quelqu'un cherche une ggplot2solution, vous pouvez utiliser l'un cowplotou l' autre des patchworkpackages

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

Créé le 17/03/2019 par le package reprex (v0.2.1.9000)

Tung
la source
1

Un graphique vide avec quelques textes qui sont positionnés.

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
la source
Pourquoi ajouter du texte? Qu'est-ce que cela a à voir avec "Comment créer une parcelle vide?". Dans l'ensemble, cela semble plus compliqué que la méthode d'OP dans la question plot(0,xaxt='n',yaxt='n',bty='n',pch='',ylab='',xlab=''), puisque vous ajoutez main = "", sub = ""même si vous obtenez le même résultat sans eux.
Gregor Thomas