geom_crossbar会忽略alpha参数吗?

时间:2016-10-15 10:52:51

标签: r ggplot2

我正在尝试将摘要统计信息添加到我的情节中,但希望它们具有一定的透明度。这似乎不适用于geom_crossbar。以示例代码from the documentation

为例
df <- data.frame(
trt = factor(c(1, 1, 2, 2)),
resp = c(1, 5, 3, 4),
group = factor(c(1, 2, 1, 2)),
upper = c(1.1, 5.3, 3.3, 4.2),
lower = c(0.8, 4.6, 2.4, 3.6)
)

p <- ggplot(df, aes(trt, resp, colour = group))
p + geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2, alpha=0.3)

工作正常,即错误栏是透明的。但是,如果我使用

p + geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2, alpha=0.3)

相反,透明度不起作用。我错过了什么吗?

编辑:mt1022的答案适用于示例代码。但是,当我尝试将其添加到我的实际绘图中时,透明度不再起作用,并且它会更改绘图中的所有其他颜色。

Here是数据,这是我的命令:

ggplot(plotdata3, aes(x=Ncases, y=Intercept.ols, group=col, colour=col)) + geom_point() + stat_summary(fun.y="mean", geom="line", alpha=0.3, aes(group=1)) +
stat_summary(fun.data="mean_cl_boot", geom="crossbar", width=0.08, aes(group=1)) + scale_color_manual(values=rgb(matrix(rep(0,27), ncol=3),alpha = 0.5)) +
scale_y_continuous(breaks=seq(0,1,by=0.1)) + coord_cartesian(ylim=c(0,1))

当我省略scale_color_manual()部分时,情节看起来like this,现在我想让交叉条变得透明,就像直线一样。

3 个答案:

答案 0 :(得分:2)

我不确定你要去的地方,但似乎有一些问题。首先,您使用颜色来区分9种不同的类别(&#34; col&#34;)。即使使用ggplot的默认调色板(色轮周围的色调相等),颜色也几乎无法区分。通过选择点大小以及将点放在摘要图形(线和横杆)下面的事实会使问题变得更糟。

你可能会更好
  1. 把积分放在最上面,
  2. 使用点形状21(实心圆圈)并将填充绑定到&#34; col&#34;和
  3. 使用Brewer调色板
  4. 下面是两个例子,由@ lukeA&#39解决方案生成的图(实际上回答了问题),以及实现上述建议的图。

    ggplot(plotdata3, aes(x=Ncases, y=Intercept.ols, group=col, colour=col)) + 
      geom_point() + 
      stat_summary(fun.y="mean", geom="line", alpha=0.3, aes(group=1)) + 
      stat_summary(fun.data="mean_cl_boot", geom="crossbar", 
                   width=0.08, aes(group=1), color = "#30303030") + 
      scale_y_continuous(breaks=seq(0,1,by=0.1)) + 
      coord_cartesian(ylim=c(0,1))
    

    ggplot(plotdata3, aes(x=Ncases, y=Intercept.ols)) + 
      stat_summary(aes(group=1), fun.y="mean", geom="line", alpha=0.3) +
      stat_summary(fun.data="mean_cl_boot", geom="crossbar", 
                   width=0.08, fill="grey80", color="grey50") + 
      geom_point(aes(group=col, fill=col), size=3, shape=21)  +
      scale_fill_brewer(palette="Set1") +
      scale_y_continuous(breaks=seq(0,1,by=0.1)) + coord_cartesian(ylim=c(0,1))
    

    第二个情节清楚地表明&#34; col&#34; 6和9往往明显低于平均值,&#34; col&#34; 1和7往往明显高于平均值。

答案 1 :(得分:1)

alpha中的geom_crossbar参数控制填充颜色的透明度; 如果指定填充颜色并调整alpha,填充颜色的透明度将会改变,但边框颜色不会改变;

p + geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2, alpha=0.2, fill = 'red')
p + geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2, alpha=0.8, fill = 'red')

如果您想为边框颜色提供透明度,可以使用透明色的scale_colour_manual

p + geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2) +
    scale_color_manual(values = rgb(c(1, 0), c(0, 1), 0, alpha = 0.2))

可能还有其他更简单的解决方案。

答案 2 :(得分:0)

colour="transparent"将胜任,position=position_dodge(0.1) 将避免重叠。

p + geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2, colour="transparent", position=position_dodge(0.1))