我正在寻找一种能让我的ggplot图更透明的功能。自定义一个新主题我认为这并不是一件好事,因为正如自己的文档所说,'使用主题()来修改主题的各个组件,允许您控制所有非数据组件的外观强烈的情节。'
说明我们有这个简单的图表:
ggplot(economics) +
aes(unemploy, psavert) +
geom_point() +
geom_smooth(se = F) +
ggtitle('Unemploy vs Personal Savings Rate')
它将呈现如下:
我的想法是构建一个修改所有元素的函数,并使它们具有一定比例的透明度,如下所示:
make.invisible <- function(graph, alpha=.75){
graph +
# Change all elements
}
是否可以使用ggplot2?
答案 0 :(得分:6)
试试这个,
print(p, vp=viewport(gp=gpar(alpha=0.3)))
答案 1 :(得分:2)
以下是this post.之后的解决方案。它使用colorblindr包中的edit_colors()
函数。 (免责声明:我是该套餐的作者。)
p <- ggplot(economics) +
aes(unemploy, psavert) +
geom_point() +
geom_smooth(se = F) +
ggtitle('Unemploy vs Personal Savings Rate')
library(colorblindr) # devtools::install_github("clauswilke/colorblindr")
library(colorspace) # install.packages("colorspace", repos = "http://R-Forge.R-project.org") --- colorblindr requires the development version
# need also install cowplot; current version on CRAN is fine.
# modify alpha values using the alpha function from the scales package
p_alpha <- edit_colors(p, scales::alpha, alpha = .5)
# print
grid::grid.newpage()
grid::grid.draw(p_alpha)
来自缩放的alpha()
函数的一个缺点是它替换了alpha值,它没有组合alpha值。所以这里有一个简单的例子,说明如何使用自己的alpha组合函数组合alpha值:
mult_alpha <- function(color, alpha = .5)
{
col <- grDevices::col2rgb(color, TRUE)/255
new_col <- grDevices::rgb(col[1, ], col[2, ], col[3, ], alpha*col[4, ])
new_col[is.na(color)] <- NA
new_col
}
p2 <- ggplot(iris, aes(Sepal.Length, fill = Species)) +
geom_density(alpha = .3) + theme_bw()
p2_mult_alpha <- edit_colors(p2, mult_alpha, alpha = .7)
两种方法之间的比较表明,它们对已经具有一定透明度的图表给出了截然不同的结果:
p2_alpha <- edit_colors(p2, scales::alpha, alpha = .7)
cowplot::plot_grid(p2_alpha, p2_mult_alpha)
(左图:使用刻度中的alpha
;右图:使用上面定义的mult_alpha
。)