Как нарисовать пустой сюжет?

106

Мне нужно сделать пустой сюжет. Это лучшее, что я мог придумать.

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

Есть более простые решения?

PS: полностью пустой, без оси и тд.

Адам СО
источник

Ответы:

107

Как насчет чего-то вроде:

plot.new()
Джошуа Ульрих
источник
@ Адам, я не понимаю, что ты имеешь в виду, говоря "собственно R".
Джошуа Ульрих
@Joshua, извините, plot.new () работает нормально, в x11 () нет необходимости. Я правильно сказал R, потому что думал, что x11 () является частью вашего решения, но он работает без него.
Adam SO
1
@Adam x11()- это кроссплатформенная команда R для открытия нового устройства. Если у вас открыто устройство и вы звоните plot.new(), текущее устройство будет очищено.
Джошуа Ульрих
1
Есть ли преимущество у x11()более dev.new()? Мой инстинкт состоит в том, чтобы выбрать последнее, чтобы приспособить любое локальное устройство по умолчанию, но я не уверен, как все работает.
Мэтт Паркер,
@Matt: Пользуюсь x11()по привычке. Я не специалист по построению графиков в R, но после просмотра документации, dev.new()вероятно, будет лучше.
Джошуа Ульрих
63

Я предлагаю кому-то создать пустой сюжет, чтобы потом добавить на него графику. Итак, используя

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

вы можете указать пределы осей вашего изображения.

Stukselbax
источник
25

Это немного проще, чем ваше исходное решение:

plot(0,type='n',axes=FALSE,ann=FALSE)
Бен Болкер
источник
Добавлять не надо ann=FALSE, все равно будет пустая область. Но отличное решение, спасибо!
MS
22

Следующее ничего не отображает на графике и останется пустым.

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

Это полезно, когда вы хотите добавить линии или точки впоследствии в forцикл или что-то подобное. Только не забудьте изменить xlimи ylimзначение на основе данных , которые вы хотите построить.

В качестве примечания: это также можно использовать для графиков Boxplot, Violin и swarm plots. для тех, кто не забывает добавить add = TRUEк своей функции построения графика, а также указать, at =на каком номере вы хотите их построить (по умолчанию ось x, если вы не установили horz = TRUEв этих функциях.

Мехрад Махмудян
источник
17

Адам, следуя вашему комментарию выше («Я хотел, чтобы пустой график служил заполнителем в многосюжетном (mfrow) графике.»), На самом деле вам нужен параметр mfg

    par(mfg=c(row,column))

- который определяет, где вы хотите разместить следующий сюжет. Например, чтобы поместить график в середину мультиплота 3x3, выполните

    par(mfrow=c(3,3))
    par(mfg=c(2,2))
    plot(rnorm(10))
Даг Хьерманн
источник
14

Вам нужно новое окно графика, а также система координат, поэтому вам нужно plot.new()и plot.window(), затем вы можете начать добавлять элементы графика:

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

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

пример сюжета

почему. узел
источник
4

В вашем решении plot.new()есть интерес, которого нет: на пустом графике, который вы «рисуете», вы можете писать текст в заданных координатах с помощью text(x = ..., y = ..., your_text).

Dotoma
источник
3
grid.newpage() ## If you're using ggplot

grid() ## If you just want to activate the device.
Брэндон Бертельсен
источник
1
grid()не имеет отношения к сетке пакета AFAIK
baptiste
2

Если кто - то ищет ggplot2решение, вы можете использовать либо cowplotили patchworkпакеты

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

Создано 17.03.2019 пакетом REPEX (v0.2.1.9000)

Тунг
источник
1

Пустой сюжет с некоторыми текстами, которые задают позицию.

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")
Ник Донг
источник
Зачем добавлять текст? При чем здесь «Как создать пустой сюжет?». В целом, это кажется более сложным, чем метод OP в вопросе plot(0,xaxt='n',yaxt='n',bty='n',pch='',ylab='',xlab=''), поскольку вы добавляете, main = "", sub = ""даже если вы получаете тот же результат без них.
Грегор Томас