在R中创建一个函数,使所有ggplot组件更加透明

时间:2018-02-05 11:38:14

标签: r ggplot2

我正在寻找一种能让我的ggplot图更透明的功能。自定义一个新主题我认为这并不是一件好事,因为正如自己的文档所说,'使用主题()来修改主题的各个组件,允许您控制所有非数据组件的外观

说明我们有这个简单的图表:

ggplot(economics) +
  aes(unemploy, psavert) +
  geom_point() +
  geom_smooth(se = F) +
  ggtitle('Unemploy vs Personal Savings Rate')

它将呈现如下:

R ggplot2 graph: Unemploy vs Personal Savings Rate

我的想法是构建一个修改所有元素的函数,并使它们具有一定比例的透明度,如下所示:

make.invisible <- function(graph, alpha=.75){
  graph +
    # Change all elements
}

是否可以使用ggplot2?

2 个答案:

答案 0 :(得分:6)

试试这个,

print(p, vp=viewport(gp=gpar(alpha=0.3)))

enter image description here

答案 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)

enter image description here

来自缩放的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)

enter image description here

(左图:使用刻度中的alpha;右图:使用上面定义的mult_alpha。)