Jak narysować pustą fabułę?

106

Muszę zrobić pustą fabułę. To najlepsze, co mogłem wymyślić.

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

Jakieś prostsze rozwiązania?

PS: całkowicie pusty, bez osi itp.

Adam SO
źródło

Odpowiedzi:

107

A może coś takiego:

plot.new()
Joshua Ulrich
źródło
@Adam, nie wiem, co masz na myśli, mówiąc „R właściwe”.
Joshua Ulrich
@Joshua, przepraszam plot.new () działa dobrze, nie ma potrzeby używania x11 (). Powiedziałem R właściwe, ponieważ myślałem, że x11 () jest częścią twojego rozwiązania, ale działa bez niego.
Adam SO
1
@Adam x11()to wieloplatformowe polecenie R do otwierania nowego urządzenia. Jeśli masz otwarte urządzenie i zadzwonisz plot.new(), bieżące urządzenie zostanie wyczyszczone.
Joshua Ulrich
1
Czy jest przewaga do x11()pokonania dev.new()? Instynkt podpowiada mi, aby wybrać to drugie, aby dostosować się do dowolnego domyślnego urządzenia lokalnego, ale nie jestem pewien, jak to działa.
Matt Parker
@Matt: używam x11()z przyzwyczajenia. Nie jestem ekspertem od kreślenia w R ale po przejrzeniu dokumentacji dev.new()pewnie byłoby lepiej.
Joshua Ulrich
63

Sugeruję, aby ktoś zrobił pustą fabułę, aby później dodać na niej trochę grafiki. Więc używając

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

możesz określić granice osi twojej grafiki.

stukselbax
źródło
25

Jest to nieznacznie prostsze niż oryginalne rozwiązanie:

plot(0,type='n',axes=FALSE,ann=FALSE)
Ben Bolker
źródło
Nie trzeba dodawać ann=FALSE, i tak będzie pusty obszar. Ale świetne rozwiązanie, dzięki!
MS Berends
22

Poniższy tekst nie wykreśla nic na wykresie i pozostanie pusty.

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

Jest to przydatne, gdy chcesz później dodać linie lub kropki w forpętli lub coś podobnego. Pamiętaj tylko, aby zmienić wartości xlimi ylimna podstawie danych, które chcesz wykreślić.

Na marginesie: można to również wykorzystać do wykresów pudełkowych, skrzypcowych i rojów. dla tych pamiętaj, aby dodać add = TRUEdo ich funkcji kreślenia, a także określić, at =na którym numerze chcesz je wykreślić (domyślnie jest to oś x, chyba że ustawiłeś horz = TRUEw tych funkcjach.

Mehrad Mahmoudian
źródło
17

Adam, podążając za twoim komentarzem powyżej („Chciałem, aby pusta działka służyła jako wypełniacz na wykresie typu multiplot (mfrow)”), tak naprawdę chcesz, aby opcja mfg

    par(mfg=c(row,column))

- który kontroluje, gdzie chcesz umieścić następny dział. Na przykład, aby umieścić działkę w środku multiplotu 3x3, zrób

    par(mfrow=c(3,3))
    par(mfg=c(2,2))
    plot(rnorm(10))
Dag Hjermann
źródło
14

Potrzebujesz nowego okna wykresu, a także układ współrzędnych, więc trzeba plot.new()i plot.window(), po czym można rozpocząć dodawanie elementów wykresu:

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

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

przykładowa fabuła

dlaczego. węzeł
źródło
4

Jest zainteresowanie twoim rozwiązaniem, które plot.new()jednak nie ma: na pustym wykresie, który „rysujesz”, możesz wpisać tekst o określonych współrzędnych text(x = ..., y = ..., your_text).

Dotoma
źródło
3
grid.newpage() ## If you're using ggplot

grid() ## If you just want to activate the device.
Brandon Bertelsen
źródło
1
grid()jest niezwiązany z pakietem sieci AFAIK
baptiste
2

Jeśli ktoś szuka ggplot2rozwiązania, można użyć jednej cowplotlub patchworkpakietów

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

Utworzono 17.03.2019 przez pakiet reprex (v0.2.1.9000)

Tung
źródło
1

Pusta działka z kilkoma tekstami, które mają ustawione pozycje.

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
źródło
Po co dodawać tekst? Co to ma wspólnego z „Jak stworzyć pustą fabułę?”. Ogólnie rzecz biorąc, wydaje się to bardziej skomplikowane niż metoda OP w pytaniu plot(0,xaxt='n',yaxt='n',bty='n',pch='',ylab='',xlab=''), ponieważ dodajesz main = "", sub = "", że bez nich uzyskasz ten sam wynik.
Gregor Thomas,