【问题标题】:R: tailoring legend in ggplot boxplot leaves two separate legendsR:在ggplot boxplot中剪裁图例留下两个单独的图例
【发布时间】:2017-02-03 06:38:21
【问题描述】:

我使用 ggplot2 包创建了一个分面箱线图。 R代码如下:

version.labs <- c(`1`="Version 1.0", `2`="Version 2.0", `3`="Version 3.0", `4`="Version 4.0", `5`="Version 5.0")
ggplot(df, aes(x=factor(Subsystem), y=Risk.value, fill=factor(Version)) ) + 
  geom_jitter(position=position_jitter(width=0.3, height=0.2), aes(colour=factor(Version)), alpha=0.9) +
  geom_boxplot(alpha = 0.5, show.legend = FALSE) + facet_grid(.~Version, labeller = as_labeller(version.labs)) +
  theme(strip.text.x = element_text(size=9, color="black", face="bold"))

除了图例之外,生成的图看起来还不错(如下所示)。

在图例中,我想更改每个项目的标题和文本标签。标题应为“版本”,标签应为“版本 1.0”、...、“版本 5.0”。

我尝试了各种方法,但它们都添加了一个新的单独图例。新图例看起来不错,但旧图例仍然存在,看起来不太好,我找不到删除它的方法。

我尝试的最后一件事是添加 scale_color_manual() 函数,如下所示:

scale_color_manual(name = "Version", labels=c("v1.0","v2.0","v3.0","v4.0","v5.0"), values=c("grey","blue","green","red","black"))

这会产生如下所示的箱线图。

可以看出有两个传说。所以,关闭但没有雪茄。任何有关如何解决此问题的提示都表示赞赏。

【问题讨论】:

  • 您的示例不可重现。但我认为你需要both scale_color_manualscale_fill_manual
  • 感谢您的评论。我也试过了,并没有解决问题。但是,我使用另一种解决方案解决了这个问题,如单独答案中所述。

标签: r ggplot2 legend boxplot


【解决方案1】:

我发现了问题所在。那是我把我的美学填充函数aes()放在了通用ggplot()中。这应该放在geom_boxplot() 中,否则一般的ggplot()geom_boxplot() 都会添加一个图例。所以我修复了这个问题,然后我使用guides() 更新了geom_boxplot() 图例中的标题。完整代码如下:

ggplot(df, aes(x=factor(Subsystem), y=Risk.value) ) + 
  geom_jitter(position=position_jitter(width=0.3, height=0.2), aes(colour=factor(Version)), alpha=0.9) +
  geom_boxplot(alpha = 0.5, show.legend = FALSE, aes(fill=factor(Version))) + facet_grid(.~Version, labeller = as_labeller(version.labs)) +
  theme(strip.text.x = element_text(size=9, color="black", face="bold")) +
  labs(x="Risk distribution per software version and subsystem type", y="Normalized risk value") + 
  guides(color=guide_legend("Version"))

最后的情节是这样的,我很满意。

【讨论】:

    【解决方案2】:

    您正在使用fill 参数来分组和生成图例。可以代替 scale_color_manual 您可以使用 scale_fill_manual 覆盖现有图例

    【讨论】:

    • 感谢您的建议。我尝试使用以下命令:scale_fill_manual(name = "Version", labels=c("v1.0","v2.0","v3.0","v4.0","v5.0"), values=c("grey", "blue", "green", "red", "black")) 但结果与第二个箱线图几乎相同,即两个图例:-/
    猜你喜欢
    • 2012-09-14
    • 2012-10-20
    • 2018-04-09
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多