gpt4 book ai didi

r - gtable 对象的透明度

转载 作者:行者123 更新时间:2023-12-04 09:39:51 24 4
gpt4 key购买 nike

我正在尝试生成 ggplot 的 png 文件具有透明背景的对象。当我直接使用 ggplot 对象时 panel.background=element_rect(fill = "transparent",colour = NA)我得到了我想要的结果。

我现在正在尝试对情节进行一些修改(向这样的方面添加标签 How do you add a general label to facets in ggplot2? )

当我绘制修改后的 gtable 而不是获得透明背景时物体,背景为浅灰色,带有细白线。

enter image description here

而如果我绘制 ggplot直接对象它确实支持透明度

enter image description here

这是我正在使用的代码:

data <- data.table(a = seq(1,5), b=sample.int(5,50,replace=TRUE), c=rnorm(100))

plotSlices <- function(input, rowfacet, colfacet, metric, label, facetlabels=FALSE){
calc <- substitute(metric)
bygroup<-c(rowfacet,colfacet)
aggregates <- input[,eval(calc),by=bygroup]

chart <- ggplot(aggregates) +
geom_bar(stat="identity") +
aes(x="", y=V1, fill=V1>0) +
facet_grid(as.formula(sprintf("%s ~ %s", rowfacet, colfacet))) +
coord_flip() +
xlab("") +
ylab(label) +
theme(legend.position = "none",
axis.title=element_text(size=16, color="white"),
axis.ticks.y=element_blank(),
panel.grid.major.y=element_blank(),
panel.grid.major.y=element_line(colour = "grey25"),
panel.grid.minor.x=element_blank(),
plot.background=element_rect(fill = "transparent",colour = NA),
panel.background=element_rect(fill = "transparent",colour = NA)
)

if (facetlabels) {
return(LabelFacets(chart, rowfacet, colfacet))
}
else {
return(chart)
}
}
LabelFacets <- function(plot, rowfacet, colfacet) {
grob <- ggplotGrob(plot)
grob <- gtable_add_cols(grob, grob$widths[[7]])
grob <- gtable_add_grob(grob, list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))),
textGrob(rowfacet, rot = -90, gp = gpar(col = gray(1)))),
4, 14, 12, name = paste(runif(2)))
grob <- gtable_add_rows(grob, grob$widths[[2]], 2)
grob <- gtable_add_grob(grob, list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))),
textGrob(colfacet, gp = gpar(col = gray(1)))),
3, 4, 3, 12, name = paste(runif(2)))
return(grob)
}
png(filename = "test.png", bg = "transparent")
plot(plotSlices(data, "a", "b", mean(c), "Label", FALSE))
dev.off()

png(filename = "test2.png", bg = "transparent")
plot(plotSlices(data, "a", "b", mean(c), "Label", TRUE))
dev.off()

最佳答案

巴蒂斯特为我解决了这个问题。问题是使用 plot() 来显示 gtable 对象。相反,我应该使用 grid.draw()。

关于r - gtable 对象的透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19035287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com