如何在ggplot2中绘制一致的透明度(alpha)(版本2.2.0)

时间:2017-04-06 08:42:19

标签: r ggplot2

E.g。

tmp_df <-
    expand.grid(group = 1:2, x = 1:3)

tmp_df$y <- 1:6
tmp_df$alpha <- c(0.1, 0.1, 0.1, 0.75, 0.1, 1)

p1 <- ggplot(tmp_df, aes(x, y, alpha = alpha)) +
    geom_bar(stat = 'identity') +
    facet_grid(group ~ .)

tmp_df2 <- tmp_df
tmp_df2$alpha <- 0.1

p2 <- ggplot(tmp_df2, aes(x, y, alpha = alpha)) +
    geom_bar(stat = 'identity') +
    facet_grid(group ~ .)

那样:

> tmp_df
  group x y alpha
1     1 1 1  0.10
2     2 1 2  0.10
3     1 2 3  0.10
4     2 2 4  0.75
5     1 3 5  0.10
6     2 3 6  1.00

> tmp_df2
  group x y alpha
1     1 1 1   0.1
2     2 1 2   0.1
3     1 2 3   0.1
4     2 2 4   0.1
5     1 3 5   0.1
6     2 3 6   0.1

现在考虑:

gridExtra::grid.arrange(p1, p2, ncol = 2)

产生以下图(p1在左边,p2在右边):

enter image description here

我们看到虽然ggplot在分面图中呈现alpha级别(特别是0.1级)没有问题,但是在数据中制作两个具有不同alpha级别的图表似乎会导致结果不一致。即右手栏比预期的要暗很多。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

事实证明这与我之前的问题密切相关,答案是根据这个答案指定比例限制:

https://stackoverflow.com/a/43250030/2109289

具体来说,对两个图表传递限制可以解决问题:

p1 <- ggplot(tmp_df, aes(x, y, alpha = alpha)) +
    geom_bar(stat = 'identity') +
    scale_alpha(limits = c(0, 1)) +
    facet_grid(group ~ .)

p2 <- ggplot(tmp_df2, aes(x, y, alpha = alpha)) +
    geom_bar(stat = 'identity') +
    scale_alpha(limits = c(0, 1)) +
    facet_grid(group ~ .)