сюжет ggplot2 без осей, легенд тощо


139

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


1
Чи не було б простіше створити шестигранний сюжет і обрізати його в редакторі зображень?
Joran

3
спробуйтеtheme_void()
Брайан Д

Відповіді:


182

Відповідно до мого коментаря у відповіді Чейза, ви можете видалити багато цього матеріалу за допомогою element_blank:

dat <- data.frame(x=runif(10),y=runif(10))

p <- ggplot(dat, aes(x=x, y=y)) + 
        geom_point() +
        scale_x_continuous(expand=c(0,0)) + 
        scale_y_continuous(expand=c(0,0))   

p + theme(axis.line=element_blank(),axis.text.x=element_blank(),
          axis.text.y=element_blank(),axis.ticks=element_blank(),
          axis.title.x=element_blank(),
          axis.title.y=element_blank(),legend.position="none",
          panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
          panel.grid.minor=element_blank(),plot.background=element_blank())

Схоже, ще є невеликий запас по краю отриманого .png, коли я зберігаю це. Можливо, хтось ще знає, як видалити навіть цей компонент.

(Історична довідка: З ggplot2 версії 0.9.2, optsзастарів Замість використання. theme()І замінити theme_blank()з element_blank().)


1
Велике дякую! Я також знайшов подібне рішення на groups.google.com/group/ggplot2/browse_thread/thread/…
користувач1320487

Коментар мимоволі: У деяких випадках theme(axis.ticks=element_blank())це не працює так добре theme(axis.ticks.x=element_blank()), мабуть, тимчасовий помилку десь (у мене є власна тема, тоді я намагаюся переосмислити: тільки axis.ticks.xі axis.ticks.yвиконувати роботу.)
PatrickT

106

Re: зміна варіантів теми тощо (для ледачих людей):

theme(axis.line=element_blank(),
      axis.text.x=element_blank(),
      axis.text.y=element_blank(),
      axis.ticks=element_blank(),
      axis.title.x=element_blank(),
      axis.title.y=element_blank(),
      legend.position="none",
      panel.background=element_blank(),
      panel.border=element_blank(),
      panel.grid.major=element_blank(),
      panel.grid.minor=element_blank(),
      plot.background=element_blank())

59

Поточні відповіді або неповні, або неефективні. Ось (можливо) найкоротший спосіб досягти результату (використовуючи theme_void():

data(diamonds) # Data example
ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) +
      theme_void() + theme(legend.position="none")

Результат:

введіть тут опис зображення


Якщо ви зацікавлені в тому, щоб просто усунути етикетки , labs(x="", y="")виконує фокус:

ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) + 
      labs(x="", y="")

ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) + theme_void() + theme(legend.position="none", panel.background = element_rect(fill="grey80"), plot.background = element_rect(fill="red"))припускає, що це не 100% нікчемність
баптист

Лабораторії (x = "", y = "") не видаляються для видалення осей, лише мітки.
miratrix

@miratrix вибачте, моя помилка. Оновлено.
luchonacho

5
@luchonacho Використовуючи labs(x="",y="")простір заголовків осей, оскільки насправді є заголовки, вони просто без знаків. Для видалення заголовків осей та місця для них краще використовувати+ theme(axis.title = element_blank())
Didzis Elferts

6
labs(x = NULL)або xlab(NULL)іншими способами.
PatrickT

42
'opts' is deprecated.

у ggplot2 >= 0.9.2користуванні

p + theme(legend.position = "none") 

6
Я усвідомлюю, що у вас ще немає прав на редагування, але якщо ви помітили інші мої відповіді ggplot2, які потрібно оновити повторно: opts (), не соромтеся запропонувати змінити. Я отримаю сповіщення і можу сам його включити.
joran

3
xy <- data.frame(x=1:10, y=10:1)
plot <- ggplot(data = xy)+geom_point(aes(x = x, y = y))
plot
panel = grid.get("panel-3-3")

grid.newpage()
pushViewport(viewport(w=1, h=1, name="layout"))
pushViewport(viewport(w=1, h=1, name="panel-3-3"))
upViewport(1)
upViewport(1)
grid.draw(panel)

Error in UseMethod("grid.draw") : no applicable method for 'grid.draw' applied to an object of class "NULL"
Роман Луштрик

grid.ls () відобразить список огляду та похоронних об’єктів
amaurel

виявляється, що в іншій версії ggplot, яку я використовую, назва на панелі відрізняється
amaurel

xy <- data.frame (x = 1: 10, y = 10: 1) plot <- ggplot (data = xy) + geom_point (aes (x = x, y = y)) plot panel = grid.get (" панель-3-4 ") grid.newpage () pushViewport (вікно перегляду (w = 1, h = 1, ім'я =" макет ")) pushViewport (вікно перегляду (w = 1, h = 1, ім'я =" панель-3- 4 ")) upViewport (1) upViewport (1) grid.draw (панель)
amaurel

-1

Це робить те, що ти хочеш?

 p <- ggplot(myData, aes(foo, bar)) + geom_whateverGeomYouWant(more = options) +
 p + scale_x_continuous(expand=c(0,0)) + 
 scale_y_continuous(expand=c(0,0)) +
 opts(legend.position = "none")

позбавляється від легенди, але осі x і y та фонова сітка все ще є.
користувач1320487
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.