我正在尝试使用ggplot透明的图例键填充。我按照Hadley的ggplot2指南中的说明更改了图例键填充,但出于某种原因,当我将填充设置为透明时,它会填充灰色。即使我将图例键填充设置为白色,它仍会在最终图中显示为灰色。
以下是一个例子:
library(ggplot2)
data1 = c(0,10, 11, 23, 33, 40, 41, 50, 59, 68, 76, 88, 90, 99)
data2 = c(2, 8, 10, 22, 39, 47, 49, 55, 62, 70, 76, 86, 88, 95)
df = data.frame(data1, data2)
(plot = ggplot() +
geom_smooth(data=df, aes(data1, data2,colour="sample1"))+
geom_abline(intercept=0, slope=1,linetype="dashed", color = "black")+
scale_x_continuous(expand=c(0,0), limits=c(0,100)) +
scale_y_continuous(expand=c(0,0), limits=c(0,100))+
theme_classic()+
labs(y="data2", x="data1",
title="sample 1 data1 vs data2") +
theme(plot.title = element_text(size=18, face="bold"),
legend.key = element_rect(colour = "transparent", fill = "white"),
legend.justification = c(1,0), legend.position = c(1,0))+
scale_color_discrete(name="Sample") )
如果我设置theme(legend.key = element_rect(colour = "transparent", fill = "red"))
,我会得到以下情节:
所以看来我可以更改图例键填充,但不能更改为白色或透明颜色。
有谁知道我做错了什么,或者如果没有办法让传说键填充透明/白色?
编辑:设置theme(legend.key = element_rect(fill = alpha("white", 0.0)))
无法解决问题。
见这里:
library(ggplot2)
library(scales)
data1 = c(0,10, 11, 23, 33, 40, 41, 50, 59, 68, 76, 88, 90, 99)
data2 = c(2, 8, 10, 22, 39, 47, 49, 55, 62, 70, 76, 86, 88, 95)
df = data.frame(data1, data2)
(plot = ggplot() +
geom_smooth(data=df, aes(data1, data2,colour="sample1"))+
theme_classic()+
labs(y="data2", x="data1",
title="sample 1 data1 vs data2") +
theme(plot.title = element_text(size=18, face="bold"),
legend.key = element_rect(colour = "transparent", fill = alpha("red", 0)),
legend.justification = c(1,0), legend.position = c(1,0))+
scale_color_discrete(name="Sample") )
EDIT2:如果我使用geom_line()
代替geom_smooth
,我可以将图例密钥填充设置为NA,因此必须是因为geom_smooth
中的行有它周围的置信区间的灰色区域,因此图例键反映了它的外观。
(plot = ggplot() +
geom_smooth(data=df, aes(data1, data2,colour="sample1"))+
geom_abline(intercept=0, slope=1,linetype="dashed", color = "black")+
scale_x_continuous(expand=c(0,0), limits=c(0,100)) +
scale_y_continuous(expand=c(0,0), limits=c(0,100))+
theme_classic()+
labs(y="data2", x="data1",
title="sample 1 data1 vs data2") +
theme(plot.title = element_text(size=18, face="bold"),
legend.key = element_rect(colour = NA, fill = NA),
legend.justification = c(1,0), legend.position = c(1,0))+
scale_color_discrete(name="Sample") )
答案 0 :(得分:10)
如果你愿意,你可以欺骗它。添加第二个geom_smooth()
。第一个带有置信乐队并且你没有展示传奇。使用第二个删除乐队但显示图例。
df$Color <- "Red"
df1 <- df
(plot = ggplot() +
geom_smooth(data=df, aes(data1, data2,colour=Color), se = TRUE, show.legend = FALSE) +
geom_smooth(data=df1, aes(data1, data2,colour=Color), se=FALSE) +
geom_abline(intercept=0, slope=1,linetype="dashed", color = "black")+
scale_x_continuous(expand=c(0,0), limits=c(0,100)) +
scale_y_continuous(expand=c(0,0), limits=c(0,100))+
theme_classic()+
labs(y="data2", x="data1",
title="sample 1 data1 vs data2") +
theme(plot.title = element_text(size=18, face="bold"),
legend.key = element_rect(colour = "transparent", fill = "white"),
legend.justification = c(1,0), legend.position = c(1,0))+
scale_color_discrete(name="Sample"))
答案 1 :(得分:4)
我也对这种行为感到疯狂,所以这里有一个适用于你的例子的工作解决方案:
plot + guides(color=guide_legend(override.aes=list(fill=NA)))
检查this主题以获取更多信息。
答案 2 :(得分:2)
除了legend.key = element_blank()
外,您还可以输入
legend.background=element_blank()
中的theme()
,也可以使文本透明
答案 3 :(得分:1)
此answer似乎是最简单的解决方案,在legend.key = element_blank()
定义中设置theme()
。
答案 4 :(得分:0)
要使用透明度级别,可以使用:
对于整个图例:
theme(legend.background=element_rect(fill = alpha("white", 0.5)))
alpha("white", 0)
与element_blank()
一样完全透明,
和alpha("white", 1)
没有透明度。
现在,对于键-如果键和背景的透明度不同:
theme(legend.background=element_rect(fill = alpha("white", 0)),
legend.key=element_rect(fill = alpha("white", .5)))
注意:背景透明性会否决按键的透明度,即背景alpha必须小于按键alpha。