Wie zeichne ich ein leeres Grundstück?

106

Ich muss ein leeres Grundstück machen. Dies ist das Beste, was ich mir vorstellen kann.

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

Einfachere Lösungen?

PS: komplett leer, keine Achse etc.

Adam SO
quelle

Antworten:

107

Wie wäre es mit so etwas wie:

plot.new()
Joshua Ulrich
quelle
@Adam, ich weiß nicht, was du mit "R richtig" meinst.
Joshua Ulrich
@ Joshua, sorry plot.new () funktioniert gut, x11 () ist nicht erforderlich. Ich sagte R richtig, weil ich dachte, x11 () sei Teil Ihrer Lösung, aber es funktioniert ohne.
Adam SO
1
@Adam x11()ist ein plattformübergreifender R-Befehl zum Öffnen eines neuen Geräts. Wenn Sie ein Gerät geöffnet haben und anrufen plot.new(), wird das aktuelle Gerät gelöscht.
Joshua Ulrich
1
Gibt es einen Vorteil x11()gegenüber dev.new()? Mein Instinkt ist es, mit letzterem zu arbeiten, um das lokale Standardgerät aufzunehmen, aber ich bin mir nicht sicher, wie die Dinge so funktionieren.
Matt Parker
@ Matt: Ich benutze x11()aus Gewohnheit. Ich bin kein Experte für das Plotten in R, aber nach einem Blick auf die Dokumentation dev.new()wäre es wahrscheinlich besser.
Joshua Ulrich
63

Ich schlage vor, dass jemand ein leeres Diagramm erstellen muss, um später einige Grafiken hinzuzufügen. Also mit

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

Sie können die Achsengrenzen Ihrer Grafik angeben.

stukselbax
quelle
25

Dies ist geringfügig einfacher als Ihre ursprüngliche Lösung:

plot(0,type='n',axes=FALSE,ann=FALSE)
Ben Bolker
quelle
Keine Notwendigkeit hinzuzufügen ann=FALSE, wird sowieso ein leerer Bereich sein. Aber eine tolle Lösung, danke!
MS Berends
22

Im Folgenden wird nichts im Diagramm dargestellt, und es bleibt leer.

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

Dies ist nützlich, wenn Sie anschließend Linien oder Punkte innerhalb einer forSchleife oder ähnlichem hinzufügen möchten . Denken Sie daran, die Werte xlimund ylimbasierend auf den Daten zu ändern, die Sie zeichnen möchten.

Als Randnotiz: Dies kann auch für Boxplot-, Violin- und Schwarmplots verwendet werden. Denken Sie daran, die add = TRUEPlotfunktion zu erweitern und anzugeben at =, auf welcher Zahl Sie sie plotten möchten (Standard ist die x-Achse, sofern Sie horz = TRUEdiese Funktionen nicht festgelegt haben.

Mehrad Mahmoudian
quelle
17

Adam, nach Ihrem obigen Kommentar ("Ich wollte, dass das leere Diagramm als Füllmaterial in einem Multiplot-Diagramm (mfrow) dient.") Wollen Sie eigentlich die Option mfg

    par(mfg=c(row,column))

- welche steuert, wo Sie das nächste Diagramm platzieren möchten. Um beispielsweise einen Plot in die Mitte eines 3x3-Multiplots zu setzen, tun Sie dies

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

Sie benötigen ein neues Plotfenster sowie ein Koordinatensystem. Sie benötigen also plot.new()und plot.window()können dann mit dem Hinzufügen von Diagrammelementen beginnen:

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

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

Beispielplot

warum. Knoten
quelle
4

Es gibt ein Interesse an Ihrer Lösung, das es plot.new()jedoch nicht gibt: In dem leeren Diagramm, das Sie "zeichnen", können Sie Text an bestimmten Koordinaten mit schreiben text(x = ..., y = ..., your_text).

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

grid() ## If you just want to activate the device.
Brandon Bertelsen
quelle
1
grid()hat nichts mit dem Rasterpaket AFAIK
baptiste
2

Wenn jemand nach einer ggplot2Lösung sucht , können Sie entweder cowplotoder patchworkPakete verwenden

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

Erstellt am 17.03.2019 durch das reprex-Paket (v0.2.1.9000)

Tung
quelle
1

Ein leerer Plot mit einigen Texten, deren Position festgelegt ist.

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
quelle
Warum Text hinzufügen? Was hat das mit "Wie erstelle ich ein leeres Grundstück?" Zu tun. Insgesamt scheint dies komplizierter zu sein als die Methode von OP in der Frage plot(0,xaxt='n',yaxt='n',bty='n',pch='',ylab='',xlab=''), da Sie hinzufügen main = "", sub = "", dass Sie auch ohne sie das gleiche Ergebnis erzielen.
Gregor Thomas