ggplot2 箱线图中的 alpha 和填充图例?
alpha and fill legends in ggplot2 boxplots?
我正在尝试结合 alpha
和 fill
美学。它在我使用 geom_bar
(或 geom_points
,对于 color
)时有效,但当我使用 geom_boxplot
.[= 时,alpha 图例不起作用25=]
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')
但不适用于箱线图 - alpha 图例为空。
ggplot(dt, aes(x = x, y = y, fill = tag1, alpha = tag2,
group = interaction(x, tag1, tag2))) +
geom_boxplot()
可以在没有填充的情况下完成更简单的版本 - 条形图默认为 gray/lightgray,箱线图默认为 white/lightwhite:
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')
ggplot(dt, aes(x = x, y = y, alpha = tag2,
group = interaction(x, tag2))) +
geom_boxplot()
但我不太确定如何解决这个问题。有什么想法吗?
我不确定为什么 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"))
另一种选择是对填充和 alpha 美学使用 interaction
,但事实证明 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"))
因此,您可以使用填充美学来完成这一切,但在颜色规范中包括透明度。这行得通,但是,再一次,因为透明度和颜色在视觉感知中有些混杂,最好只使用四种不同的颜色。
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")
我正在尝试结合 alpha
和 fill
美学。它在我使用 geom_bar
(或 geom_points
,对于 color
)时有效,但当我使用 geom_boxplot
.[= 时,alpha 图例不起作用25=]
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')
但不适用于箱线图 - alpha 图例为空。
ggplot(dt, aes(x = x, y = y, fill = tag1, alpha = tag2,
group = interaction(x, tag1, tag2))) +
geom_boxplot()
可以在没有填充的情况下完成更简单的版本 - 条形图默认为 gray/lightgray,箱线图默认为 white/lightwhite:
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')
ggplot(dt, aes(x = x, y = y, alpha = tag2,
group = interaction(x, tag2))) +
geom_boxplot()
但我不太确定如何解决这个问题。有什么想法吗?
我不确定为什么 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"))
另一种选择是对填充和 alpha 美学使用 interaction
,但事实证明 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"))
因此,您可以使用填充美学来完成这一切,但在颜色规范中包括透明度。这行得通,但是,再一次,因为透明度和颜色在视觉感知中有些混杂,最好只使用四种不同的颜色。
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")