r - Alpha并在ggplot2箱图中填充图例?

标签 r ggplot2 scale legend alpha

我正在尝试结合Alpha并填写ggplot2。当我使用geom_bar(或geom_points,用于颜色)时,它可以工作,但是当我使用geom_boxplot时,alpha图例不起作用。

library(data.table)
library(ggplot2)
dt = data.table(x = rep(1:5,6), y = rnorm(30), tag1 = rep(c('hey', 'what'), 15), tag2 = rep(c('yeah', 'yeah', 'so', 'so', 'so'), 6))

它适用于酒吧:
ggplot(dt[, list(y=mean(y)), by=list(x, tag1, tag2)], aes(x=x, y=y, fill=tag1, alpha=tag2, group=interaction(x,tag1,tag2))) + geom_bar(stat = 'identity', position = 'dodge')

enter image description here

但不适用于箱线图-Alpha图例为空。
ggplot(dt, aes(x=x, y=y, fill=tag1, alpha=tag2, group=interaction(x,tag1,tag2))) + geom_boxplot()

enter image description here

无需填充即可完成一个更简单的版本-似乎bar默认为灰色/浅灰色,boxplot默认为白色/浅白色:
ggplot(dt[, list(y=mean(y)), by=list(x, tag2)], aes(x=x, y=y, alpha=tag2, group=interaction(x,tag2))) + geom_bar(stat = 'identity')

enter image description here
ggplot(dt, aes(x=x, y=y, alpha=tag2, group=interaction(x,tag2))) + geom_boxplot()

enter image description here

但我不太确定如何解决此问题。有什么想法吗?

最佳答案

我不确定ggplot为什么实际上没有在框图中提供图例中的alpha级别,但是您可以使用override.aes对其进行硬编码。 (编者注:对于箱形图或条形图,我发现Alpha美学有点令人困惑。很难从透明度上将透明度与填充色区分开,并且灰度Alpha图例会加剧该问题,因为没有任何东西映射到灰色剧情。)

在下面的代码中,为了提高图例的可见性,我从alpha图例中删除了方框行,并增加了图例键的高度。我还编辑了美学,以消除对group参数的需要。

ggplot(dt, aes(x=factor(x), y=y, fill=tag1, alpha=tag2)) + 
  geom_boxplot() +
  scale_alpha_manual(values=c(0.2,0.7)) +
  guides(alpha=guide_legend(override.aes=list(fill=hcl(c(15,195),100,0,alpha=c(0.2,0.7)),
                                              colour=NA))) +
  theme(legend.key.height=unit(1,"cm"))

enter image description here

另一种选择是将interaction用于填充和alpha美观,但事实证明,在这种情况下,ggplot不包含任何颜色:
ggplot(dt, aes(x=factor(x), y=y, alpha=interaction(tag1,tag2)), 
       fill=interaction(tag1,tag2)) + 
  geom_boxplot() +
  scale_fill_manual(values=rep(hcl(c(15,195),100,65), 2)) +
  scale_alpha_manual(values=rep(c(0.3, 1), each=2)) +
  theme(legend.key.height=unit(2,"cm")) 

enter image description here

因此,相反,您可以使用填充美学来完成所有操作,但要在颜色规范中包括透明度。这是可行的,但是再一次,因为透明度和颜色在视觉感知中有些混杂,所以最好只使用四种不同的颜色。
ggplot(dt, aes(x=factor(x), y=y, fill=interaction(tag1,tag2,sep="-"))) + 
  geom_boxplot() +
  scale_fill_manual(values=hcl(c(15,195,15,195),100,65, alpha=c(0.4,0.4,1,1))) +
  theme(legend.key.height=unit(1,"cm")) +
  labs(fill="Tag 1 - Tag 2")

enter image description here

关于r - Alpha并在ggplot2箱图中填充图例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40612971/

相关文章:

r - 如何将 tibble 中的行乘以另一个 tibble 中的另一个对应行

r - 在 R 中的 roc 图上按组添加 AUC

r - 发散图的 x 轴起始值

ios - 水平缩放 UIView

database - 启动具有许多交互的社交应用程序时要避免的代码和服务器陷阱?

c# - Unity3D局部问题

r - 解析错误(outFile): unexpected end of input - bug in package install, and how to fix

r - 有没有不使用客户端-服务器方法的 R GUI?

R 包含逗号并显示数字的最大 dp

r - 与 spplot 相比,如何使用 ggplot 改进空间光栅图?