Удалите белые строки вокруг коробки ggplot при экспорте [дубликат]

Уже занятая тема, но из того, что я прочитал здесь, следующее помогло мне понять, как она работает внутри:

def bar(a=[]):
     print id(a)
     a = a + [1]
     print id(a)
     return a

>>> bar()
4484370232
4484524224
[1]
>>> bar()
4484370232
4484524152
[1]
>>> bar()
4484370232 # Never change, this is 'class property' of the function
4484523720 # Always a new object 
[1]
>>> id(bar.func_defaults[0])
4484370232
93
задан Yuriy Petrovskiy 17 September 2011 в 14:17
поделиться

2 ответа

Обновлено с помощью функции theme(), ggsave() и кода для фона легенды:

df <- data.frame(y = d, x = 1, group = rep(c("gr1", "gr2"), 50))
p <- ggplot(df) +
  stat_boxplot(aes(x = x, y = y, color = group)
    , fill = "transparent" # for the inside of the boxplot
  ) 

Самый быстрый способ используется с помощью rect, так как все элементы прямоугольника наследуются от rect:

p <- p +
  theme(
        rect = element_rect(fill = "transparent") # all rectangles
      )
    p

Более контролируемый способ - использовать опции theme:

p <- p +
  theme(
    panel.background = element_rect(fill = "transparent") # bg of the panel
    , plot.background = element_rect(fill = "transparent", col = NA) # bg of the plot
    , panel.grid.major = element_blank() # get rid of major grid
    , panel.grid.minor = element_blank() # get rid of minor grid
    , legend.background = element_rect(fill = "transparent") # get rid of legend bg
    , legend.box.background = element_rect(fill = "transparent") # get rid of legend panel bg
  )
p

Для сохранения:

ggsave(p, filename = "tr_tst2.png",  bg = "transparent")
24
ответ дан YCR 21 August 2018 в 23:56
поделиться
  • 1
    Если вы не устанавливаете цвет plot.background, как ответ выше вашего сюжета, будет иметь слабый контур. – jsta 15 March 2018 в 23:15

В дополнение к panel.background есть опция plot.background:

df <- data.frame(y=d,x=1)
p <- ggplot(df) + stat_boxplot(aes(x = x,y=y)) 
p <- p + opts(
    panel.background = theme_rect(fill = "transparent",colour = NA), # or theme_blank()
    panel.grid.minor = theme_blank(), 
    panel.grid.major = theme_blank(),
    plot.background = theme_rect(fill = "transparent",colour = NA)
)
#returns white background
png('tr_tst2.png',width=300,height=300,units="px",bg = "transparent")
print(p)
dev.off()

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

Edit

ggplot2 с тех пор обновлен и функция opts() устарела. В настоящее время вместо theme_rect() и panel.background вместо opts() и element_rect() вы будете использовать theme() и т. Д.

82
ответ дан joran 21 August 2018 в 23:56
поделиться
  • 1
    Я не ожидал, что он будет работать с Mac при тестировании с текущей PowerPoint этой платформы, но он работает как рекламируемый. И он работает с pdf-файлами, если вы удалите единицы и замените размеры в дюймах. Хорошая работа. – 42- 17 September 2011 в 17:43
  • 2
    Это отлично работает с MS Powerpoint 2010. На самом деле, для этого мне было нужно это правильно. – Yuriy Petrovskiy 18 September 2011 в 15:11
  • 3
    Если вы используете ggsave, не забудьте добавить bg = "transparent", чтобы перейти к графическому устройству png. – Tom 3 May 2012 в 08:31
  • 4
    если вы используете пакет knitr (или slidify и т. д.), вам необходимо передать dev.args = list(bg = 'transparent') в качестве опции chunk. Подробнее здесь stackoverflow.com/a/13826154/561698 – Andrew 24 April 2014 в 20:50
  • 5
    сейчас это устаревает ... может быть, моя версия R, хотя – karen 9 July 2018 в 15:07
  • 6
Другие вопросы по тегам:

Похожие вопросы: