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.

Respostas:


107

Que tal algo como:

plot.new()

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


25

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

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

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.


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

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


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


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

grid() ## If you just want to activate the device.

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)


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.