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.

Odpowiedzi:


107

A może coś takiego:

plot.new()

@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.


25

Jest to nieznacznie prostsze niż oryginalne rozwiązanie:

plot(0,type='n',axes=FALSE,ann=FALSE)

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.


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

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


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).



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)


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

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.