Como desenhar um enredo vazio?

106

Eu preciso fazer um enredo vazio. Este é o melhor que eu poderia fazer.

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

Alguma solução mais simples?

PS: completamente vazio, sem eixo etc.

Adam SO
fonte

Respostas:

107

Que tal algo como:

plot.new()
Joshua Ulrich
fonte
@Adam, não sei o que quer dizer com "R propriamente dito".
Joshua Ulrich
@Joshua, desculpe plot.new () funciona bem, não há necessidade de x11 (). Eu disse R adequado porque pensei que x11 () fazia parte da sua solução, mas funciona sem ele.
Adam SO
1
@Adam x11()é um comando R de plataforma cruzada para abrir um novo dispositivo. Se você tiver um dispositivo aberto e ligar plot.new(), o dispositivo atual será apagado.
Joshua Ulrich
1
Existe uma vantagem em x11()terminar dev.new()? Meu instinto é escolher o último para acomodar qualquer que seja o dispositivo padrão local, mas não tenho certeza de que é assim que as coisas funcionam.
Matt Parker
@Matt: Eu uso x11()devido ao hábito. Não sou especialista em plotagem em R, mas depois de dar uma olhada na documentação, dev.new()provavelmente seria melhor.
Joshua Ulrich
63

Sugiro que alguém faça um gráfico vazio para adicionar alguns gráficos depois. Então, usando

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

você pode especificar os limites dos eixos do seu gráfico.

Stukselbax
fonte
25

Isso é um pouco mais simples do que sua solução original:

plot(0,type='n',axes=FALSE,ann=FALSE)
Ben Bolker
fonte
Não há necessidade de adicionar ann=FALSE, de qualquer forma será uma área vazia. Mas uma ótima solução, obrigado!
MS Berends
22

O seguinte não representa nada no gráfico e permanecerá vazio.

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

Isso é útil quando você deseja adicionar linhas ou pontos posteriormente em um forloop ou algo semelhante. Apenas lembre-se de alterar os valores xlime com ylimbase nos dados que deseja plotar.

Como observação lateral: também pode ser usado para Boxplot, plotagens de violino e plotagens de enxame. para aqueles, lembre-se de adicionar add = TRUEà sua função de plotagem e também especificar at =para especificar em qual número você deseja plotá-los (o padrão é o eixo x, a menos que você tenha definido horz = TRUEessas funções.

Mehrad Mahmoudian
fonte
17

Adam, seguindo seu comentário acima ("Eu queria que o gráfico vazio servisse como preenchimento em um gráfico multiplot (mfrow)."), O que você realmente quer é a opção mfg

    par(mfg=c(row,column))

- que controla onde você deseja colocar o próximo gráfico. Por exemplo, para colocar um gráfico no meio de um multiplot 3x3, faça

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

Você precisa de uma nova janela de plotagem e também de um sistema de coordenadas, então você precisa plot.new()e plot.window(), então, pode começar a adicionar elementos de gráfico:

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

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

enredo de exemplo

porquê.nó
fonte
4

Há um interesse em sua solução que plot.new()não mudou: no gráfico vazio que você "desenhou", você pode escrever texto em coordenadas especificadas com text(x = ..., y = ..., your_text).

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

grid() ## If you just want to activate the device.
Brandon Bertelsen
fonte
1
grid()não está relacionado ao pacote de grade AFAIK
baptiste
2

Se alguém estiver procurando por uma ggplot2solução, você pode usar os pacotes cowplotoupatchwork

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

Criado em 17/03/2019 pelo pacote reprex (v0.2.1.9000)

Tung
fonte
1

Uma trama vazia com alguns textos que são posicionados.

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
fonte
Por que adicionar texto? O que isso tem a ver com "Como criar uma trama vazia?". No geral, isso parece mais complicado do que o método do OP na questão plot(0,xaxt='n',yaxt='n',bty='n',pch='',ylab='',xlab=''), já que você adiciona main = "", sub = ""mesmo obtém o mesmo resultado sem eles.
Gregor Thomas