从 ggplot2 中的图例类别中删除 stat_summary 个符号
Removing stat_summary symbols from legend categories in ggplot2
我有以下代码创建了两个小提琴图:
ggplot(both,aes(x=levelsname,y=loginc,fill=levelsname))+
geom_violin() +
stat_summary(fun.y = mean,
aes(shape="Mean"),
colour='black',
geom="point",
size=3)+
scale_shape_manual("Summary Statistics", values=c("Mean"="+"))+
scale_fill_manual(values=c('gray70','orange','red'))+
scale_x_discrete(name="Site Category")+
scale_y_continuous(name = "Log(Incidence/100,000")+
guides(fill=guide_legend(title = "Site Category"))+
facet_grid(~ANA)+
theme_classic()+
theme(axis.text.x=element_blank())
除了传说之外,这些情节的一切都是正确的。我试图从站点类别下的图例中删除黑色圆圈,并将其替换为 + 符号。我还想移动站点类别图例项下方的 + 和表示图例符号,使其看起来像一个图例。
您不应该在 aes
调用中包含 shape="Mean"
。这不是美学映射!将它放在 aes
中会使 ggplot
认为您正在设置 shape
以映射到始终采用值 "mean"
的字符变量。于是就有了诡异的传说。
您可以只使用 shape="+"
作为 stat_summary
调用中的参数来获得您想要的效果。您可能还需要删除 scale_shape_manual("Summary Statistics", values=c("Mean"="+"))
行,因为不再有形状比例。
要回答你问题的最后一部分,如果你想为你的图例添加一个单独的 "mean" 行,你 可以 添加一个额外的级别 "Mean" 到映射到 fill
美学的变量(然后手动将其填充设置为透明)。见下文:
d <- data.frame(x=factor(c(1,2)), y=rnorm(100))
ggplot(d, aes(x,y, group=x, fill=x)) +
geom_violin() +
stat_summary(shape="+", fun="mean", aes(fill="Mean"), geom="point", size=3) +
scale_fill_manual(values=c("blue", "red", "#00000000"), limits=c(1,2,"Mean"))
编辑: 我找到了一种方法来去掉图例中线中 + 周围的框,但这是一个可怕的技巧。您需要两个 stat_summary
图层,其中一个图层 color
设置为具有美学映射的透明(因此图例框是透明的,但这也使图例“+”也透明),然后第二个 color="black"
直接替换图例中的“+”而不是方框。
ggplot(d, aes(x,y, group=x, fill=x, color=x)) +
geom_violin() +
stat_summary(shape="+", fun="mean", aes(fill="Mean",color="Mean"), geom="point", size=3)+
stat_summary(shape="+", fun="mean",color="black", geom="point", size=3) +
theme_classic() +
scale_fill_manual(values=c("lightblue", "red", "#00000000"), limits=c(1,2,"Mean"))+
scale_color_manual(values=c("black", "black", "#00000000"), limits=c(1,2,"Mean"))
我有以下代码创建了两个小提琴图:
ggplot(both,aes(x=levelsname,y=loginc,fill=levelsname))+
geom_violin() +
stat_summary(fun.y = mean,
aes(shape="Mean"),
colour='black',
geom="point",
size=3)+
scale_shape_manual("Summary Statistics", values=c("Mean"="+"))+
scale_fill_manual(values=c('gray70','orange','red'))+
scale_x_discrete(name="Site Category")+
scale_y_continuous(name = "Log(Incidence/100,000")+
guides(fill=guide_legend(title = "Site Category"))+
facet_grid(~ANA)+
theme_classic()+
theme(axis.text.x=element_blank())
除了传说之外,这些情节的一切都是正确的。我试图从站点类别下的图例中删除黑色圆圈,并将其替换为 + 符号。我还想移动站点类别图例项下方的 + 和表示图例符号,使其看起来像一个图例。
您不应该在 aes
调用中包含 shape="Mean"
。这不是美学映射!将它放在 aes
中会使 ggplot
认为您正在设置 shape
以映射到始终采用值 "mean"
的字符变量。于是就有了诡异的传说。
您可以只使用 shape="+"
作为 stat_summary
调用中的参数来获得您想要的效果。您可能还需要删除 scale_shape_manual("Summary Statistics", values=c("Mean"="+"))
行,因为不再有形状比例。
要回答你问题的最后一部分,如果你想为你的图例添加一个单独的 "mean" 行,你 可以 添加一个额外的级别 "Mean" 到映射到 fill
美学的变量(然后手动将其填充设置为透明)。见下文:
d <- data.frame(x=factor(c(1,2)), y=rnorm(100))
ggplot(d, aes(x,y, group=x, fill=x)) +
geom_violin() +
stat_summary(shape="+", fun="mean", aes(fill="Mean"), geom="point", size=3) +
scale_fill_manual(values=c("blue", "red", "#00000000"), limits=c(1,2,"Mean"))
编辑: 我找到了一种方法来去掉图例中线中 + 周围的框,但这是一个可怕的技巧。您需要两个 stat_summary
图层,其中一个图层 color
设置为具有美学映射的透明(因此图例框是透明的,但这也使图例“+”也透明),然后第二个 color="black"
直接替换图例中的“+”而不是方框。
ggplot(d, aes(x,y, group=x, fill=x, color=x)) +
geom_violin() +
stat_summary(shape="+", fun="mean", aes(fill="Mean",color="Mean"), geom="point", size=3)+
stat_summary(shape="+", fun="mean",color="black", geom="point", size=3) +
theme_classic() +
scale_fill_manual(values=c("lightblue", "red", "#00000000"), limits=c(1,2,"Mean"))+
scale_color_manual(values=c("black", "black", "#00000000"), limits=c(1,2,"Mean"))