Уже занятая тема, но из того, что я прочитал здесь, следующее помогло мне понять, как она работает внутри:
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
Обновлено с помощью функции 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")
В дополнение к 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()
и т. Д.
bg = "transparent"
, чтобы перейти к графическому устройству png.
– Tom
3 May 2012 в 08:31
knitr
(или slidify
и т. д.), вам необходимо передать dev.args = list(bg = 'transparent')
в качестве опции chunk. Подробнее здесь stackoverflow.com/a/13826154/561698
– Andrew
24 April 2014 в 20:50
plot.background
, как ответ выше вашего сюжета, будет иметь слабый контур. – jsta 15 March 2018 в 23:15