Як намалювати порожній сюжет?


106

Мені потрібно зробити порожній сюжет. Це найкраще, що я міг придумати.

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

Будь-які простіші рішення?

PS: повністю порожній, без осі тощо.

Відповіді:


107

Як щодо чогось такого:

plot.new()

@ Адам, я не знаю, що ти маєш на увазі під "R правильним".
Джошуа Ульріх

@Joshua, вибачте plot.new () працює нормально, немає потреби в x11 (). Я сказав, що R належно, тому що я вважав, що x11 () є частиною вашого рішення, але він працює без нього.
Адам 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))

ви можете вказати межі осей вашої графіки.


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, скрипкових сюжетів та роїв. для тих, хто пам'ятає додати add = TRUEїх функцію побудови графіків, а також вказати, at =для якого числа ви хочете побудувати їх (за замовчуванням - ось x, якщо ви не встановили horz = TRUEці функції.


17

Адам, виходячи з Вашого коментаря вище ("Я хотів, щоб порожній сюжет був заповнювачем у мультиплот-сюжеті".

    par(mfg=c(row,column))

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

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



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

Створено 2019-03-17 пакетом reprex (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")

Навіщо додавати текст? Що це стосується "Як створити порожній сюжет?". Загалом, це здається складнішим, ніж метод ОП у питанні plot(0,xaxt='n',yaxt='n',bty='n',pch='',ylab='',xlab=''), оскільки ви додаєте, main = "", sub = ""навіть без них ви отримаєте такий же результат.
Грегор Томас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.