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

17
可不可以在ggplot中使用文字标签的部分斜体字?我曾经尝试使用expressionitalic命令(expression(paste(italic("some text")))), 但是这些无法传递到数据框因为这些命令的结果不是原子的。设置参数fontface = "italic"也不够用,因为它会将整个标签变成斜体而不只是标签中一些选择的字符。例如,我想让一些必须用斜体的拉丁短语在标签中斜体显示(例如“in vivo”在“in vivo point”中)。
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))

7
在这种情况下,是否无法使用 fontface = "italic" 选项:ggplot(data = df, aes(x = V1, y = V2)) + geom_point() + geom_text_repel(aes(label = V3), fontface = "italic") - Jota
1
为了对OP有所公正,这些“_repel”函数的帮助未直接在文本中包含所有支持的美学,但确实说:“有关这些函数[geom_text/geom_label]的更多详细信息,请参阅文档”。 - hrbrmstr
抱歉,我匆忙之中忘记了只有标签的子字符串需要斜体,我会修改问题。 - Bob
1
如果您使用 parse = TRUE,则可以使用 ?plotmath,但您需要重新配置标签。 - alistaire
1
谢谢!顺便提一下,这似乎在当前稳定版本的ggrepel中无法运行,但开发版本支持plotmath表达式(https://github.com/slowkow/ggrepel/issues/60)。如果您愿意,可以回答并标记您的答案为正确答案。 - Bob
1个回答

14

您可以使用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)

带部分斜体标签的绘图


2
element_text()有一个名为face的参数。我不确定为什么geom_text()没有这个选项。 - mindlessgreen
请注意,查看可能的渲染选项:demo(plotmath) - Megatron
2
geom_text() 调用选项 fontface -- http://www.cookbook-r.com/Graphs/Fonts/ - hd1
3
从这个问题中可以看出,设置参数fontface="italic"并不足够,因为这将使整个标签变成斜体字,而不仅仅是标签中的一部分字符。 - alistaire

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