从图例中删除误差条 (ggplot2)

3

我有一个用以下命令绘制的图表:

ggplot(data=test_mod, aes(x=realDist , y=1-value, color=as.factor(foo) , size=as.factor(foo) )) +
  stat_summary(fun.y=mean, geom="line", alpha=0.85 ) + 
  stat_summary(fun.y=mean, geom="point", pch=21, fill="white", size=2 ) +
  #stat_summary(fun.data=mean_cl_normal, geom="errorbar", width=8, size = 0.5) + 
  theme_bw(base_size = 15, base_family = "Palatino") + 
  theme(legend.key = element_blank()) 

我得到了下面这个图例:

输入图像描述

然而,当我取消注释命令的第三行时:

ggplot(data=test_mod, aes(x=realDist , y=1-value, color=as.factor(foo) , size=as.factor(foo) )) +
  stat_summary(fun.y=mean, geom="line", alpha=0.85 ) + 
  stat_summary(fun.y=mean, geom="point", pch=21, fill="white", size=2 ) +
  stat_summary(fun.data=mean_cl_normal, geom="errorbar", width=8, size = 0.5) + 
  theme_bw(base_size = 15, base_family = "Palatino") + 
  theme(legend.key = element_blank()) 

我得到了一个略微不同的图例: enter image description here 请注意,当我在绘图中使用errorbar时,在点之后会出现一些细小的线条
如何消除在我的图例中出现的这些细小的线条?
2个回答

6
您可以使用show.legend=FALSE来关闭该元素的图例。
ggplot(data=test_mod, aes(x=realDist , y=1-value, color=as.factor(foo) , size=as.factor(foo) )) +
  stat_summary(fun.y=mean, geom="line", alpha=0.85 ) + 
  stat_summary(fun.y=mean, geom="point", pch=21, fill="white", size=2 ) +
  stat_summary(fun.data=mean_cl_normal, geom="errorbar", width=8, size = 0.5, show.legend=FALSE) + 
  theme_bw(base_size = 15, base_family = "Palatino") + 
  theme(legend.key = element_blank())

show_guide 已被弃用,现在应该使用 show.legend - Tunaki

1
你可以简单地将代码中的“errorbar”行的位置放在“point”行的上方。这样,点将覆盖小线而不是反过来。
ggplot(data=test_mod, aes(x=realDist , y=1-value, color=as.factor(foo) , size=as.factor(foo) )) +
  stat_summary(fun.y=mean, geom="line", alpha=0.85 ) + 
  stat_summary(fun.data=mean_cl_normal, geom="errorbar", width=8, size = 0.5) +
  stat_summary(fun.y=mean, geom="point", pch=21, fill="white", size=2 ) + 
  theme_bw(base_size = 15, base_family = "Palatino") + 
  theme(legend.key = element_blank()) 

尽管@nongkrong的回答是一个可行的解决方案,但它直接解决了问题的核心。我不得不接受那个答案,但你的答案也给了我重要的见解。之前我不知道执行顺序会影响绘图。谢谢! - cross
@cross 很高兴能帮到你!关于提出这样的问题,我有一个建议:请确保在你的问题中包含可重现的示例。这样,我可以运行你提供的代码,并得到与你完全相同的图形。 - Jota
@user4786271 有几种可能的方法。一般来说,您要提供一个最小化的可重现示例。您可以自己创建一个(例如,data.frame(x=1:100, y=1:100, z=1:100)),使用其中一个内置数据集(例如,mtcars),或者如果它不太大,则提供dput(test_mod)的输出。阅读如何制作R可重现示例以获取更多信息。 - Jota

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接