如何在 ggplot 的 geom_text_repel 或 geom_text 标签中包含斜体文本?

Posted

技术标签:

【中文标题】如何在 ggplot 的 geom_text_repel 或 geom_text 标签中包含斜体文本?【英文标题】:How do I include italic text in geom_text_repel or geom_text labels for ggplot? 【发布时间】:2017-05-22 14:07:48 【问题描述】:

是否可以将部分斜体的文本标签传递给 ggplot?我曾尝试使用expressionitalic 命令(expression(paste(italic("some text")))),但这些命令无法传递到数据帧中,因为命令的结果不是原子的。设置参数fontface = "italic" 也是不够的,因为这会使整个标签斜体,而不仅仅是标签中的一组选定字符。例如,我希望一些必须斜体的拉丁短语在标签中使用斜体(例如“体内点”中的“体内”)。

library(ggplot)
library(ggrepel)

df <- data.frame(V1 = c(1,2), V2 = c(2,4), V3 = c("in vivo point","another point"))

ggplot(data = df, aes(x = V1, y = V2)) + geom_point() + geom_text_repel(aes(label = V3))

【问题讨论】:

添加fontface = "italic"不是一个选项:ggplot(data = df, aes(x = V1, y = V2)) + geom_point() + geom_text_repel(aes(label = V3), fontface = "italic") ? 为了对 OP 公平起见,那些 _repel 函数的帮助未能直接在文本中包含所有支持的美学,但它确实“见这些函数的文档 [geom_text/geom_label] 了解更多详细信息" 抱歉,匆忙中,我忘了包括标签的子字符串要斜体;我会修改问题。 如果您使用parse = TRUE,则可以使用?plotmath,但您必须重新配置标签。 谢谢!顺便说一句,这实际上在 ggrepel 的当前稳定版本中似乎不起作用,但开发版本支持 plotmath 表达式。 (github.com/slowkow/ggrepel/issues/60)。如果您愿意,可以将其作为答案发布,以便我将您的答案标记为正确。 【参考方案1】:

您可以使用parse = TRUE?plotmath 表达式(作为字符串)传递给geom_textgeom_text_repel。您必须将字符串重写为 plotmath,但如果不是太多,也不算太糟糕。

df <- data.frame(V1 = c(1,2), V2 = c(2,4), 
                 V3 = c("italic('in vivo')~point", "another~point"))

ggplot(data = df, aes(x = V1, y = V2, label = V3)) + 
    geom_point() + 
    geom_text_repel(parse = TRUE)

【讨论】:

element_text() 有一个名为 face 的参数。我不知道为什么geom_text() 没有这个选项。 仅供参考,查看可能的渲染选项:demo(plotmath) geom_text() 调用选项 fontface -- cookbook-r.com/Graphs/Fonts @hd1 来自问题:“设置参数 fontface = "italic" 也不够,因为这会使整个标签斜体,而不仅仅是标签中的一组选定字符。”

以上是关于如何在 ggplot 的 geom_text_repel 或 geom_text 标签中包含斜体文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在逻辑图上制作标签(使用 ggplot/ggplotly 制作)显示 % 与小数

如何在ggplot中模糊部分情节?

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

如何使用变量在ggplot中指定列名

如何在 ggplot 中绘制词频排名 - 只有一个变量?

如何在ggplot的直方图条上打印频率