ggplot中只有一个图例的斜体标签

Posted

技术标签:

【中文标题】ggplot中只有一个图例的斜体标签【英文标题】:Italicize labels of only one legend in ggplot 【发布时间】:2018-07-12 08:11:17 【问题描述】:

我正在尝试用两个单独的图例来格式化一个情节。我有一个形状图例,用于我所有不同的分类群,还有一个颜色图例,用于它们所属的类别。我只想斜体化形状图例中的分类单元名称,而不是斜体化颜色图例中的类别名称。到目前为止,我可以使所有图例条目斜体或不使用此行:

plot + theme(legend.text = element_text(face = "italic"))

但我不知道如何仅指定形状图例。我认为theme() 不合适,因为它改变了整个情节的主题。我还查看了guides(),但它似乎没有指定图例标签字体的选项。

一些样本数据和一个图:

species <- c("M. mulatta", "P. ursinus", "C. mitis", "C. guereza")
subfam <- c("Cercopithecine", "Cercopithecine", "Cercopithecine", "Colobine")
x <- rnorm(4, 1:10)
y <- rnorm(4, 2:20)
df <- data.frame(cbind(species, subfam, x, y))

ggplot(df, aes(x, y)) + geom_point(aes(shape = species, color = subfam), size = 4) +
  labs(shape = "Species", color = "Subfamily")

总之,我想让物种名称斜体,而不是亚科名称。看起来应该很简单......这在ggplot中甚至可能吗?

提前致谢!

【问题讨论】:

这是相当困难的,涉及在绘图之前对原始图形对象 (grobs) 的操作。我倾向于对亚科使用刻面,对物种使用颜色,因此只生成一个图例:library(tidyverse); df %&gt;% rename(Species = species, Subfamily = subfam) %&gt;% ggplot(aes(x, y)) + geom_point(aes(color = Species)) + facet_wrap(~Subfamily) + theme(legend.text = element_text(face = "italic")) 【参考方案1】:

您可以通过在scale_shape_discrete* 中设置element_text 参数(包括字体)来专门为shape 图例自定义标签。

ggplot(df, aes(x, y)) +
  geom_point(aes(shape = species, color = subfam), size = 4) +
  labs(shape = "Species", color = "Subfamily") +
  scale_shape_discrete(guide =
                         guide_legend(label.theme = element_text(angle = 0, face = "italic")))


*此方法也适用于scale_shape_manual,它也有一个guide 参数。请参阅?scale_shape?scale_shape_manual


由于某种原因,我需要在element_text 中指定angle,否则会出错。您可能还需要设置size

【讨论】:

这是一个很好的解决方案!不幸的是,我的真实数据中还有另一个组件,我没有预料到会影响解决方案,因此没有将其包含在我最初的问题中。我实际上有 22 个分类单元,而 scale_shape_discrete() 最多只允许 6 种不同的形状。我最初有 scale_shape_manual() 来指定 22 个形状(我认为它们是完全可辨别的),但是这两个调用不能一起工作以产生所需的结果。关于如何使它们都起作用的任何想法?谢谢~ ggplot 中,每个aesthetic 只能拨打一次scale_xxx。因此,在您的情况下,您需要将scale_shape_discrete 替换为scale_shape_manual,它采用相同的参数,包括guide 我曾尝试将手动形状值添加到 scale_shape_discrete,但没有成功;我忘了考虑在 scale_shape_manual 中指定指南的替代方法。完美运行,谢谢!

以上是关于ggplot中只有一个图例的斜体标签的主要内容,如果未能解决你的问题,请参考以下文章

如何在ggplot2的图例中斜体化一个类别

使用相同的标签和颜色为不同的图形手动斜体和着色图例

ggplot2:顶部图例键符号大小随图例键标签而变化

在 ggplot 中编辑图例(文本)标签

图例标签组合图(ggplot 和拼凑)

更改ggplot2图例中单个标签的字体(变为粗体)