ggplot2如何实现单个标签内混合斜体与常规字体无间隔
ggplot2 混合字体标签无间隔拼接方案
问题背景
需要在ggplot2中实现同一标签内混合斜体、常规字体的效果:标签wordX、wordY中word部分为斜体,X、Y为常规字体,两部分紧密拼接无多余空格。
初始实现代码如下:
data("mtcars") mtcars$Type <- as.factor(c(rep("wordX", 16), rep("wordY", 16))) lbs = brk = levels(mtcars$Type) lbs[match("wordX", brk)] = expression(italic("word")~X) lbs[match("wordY", brk)] = expression(italic("word")~Y) ggplot(mtcars, aes(factor(am), mpg, fill=Type)) + geom_col(position="dodge") + theme(legend.text = element_text(size = 18), legend.title = element_text(size = 18)) + scale_fill_discrete(breaks=brk, labels=lbs)
运行后存在问题:斜体的word和后续常规字体的X、Y之间有明显空格,不符合无间隔拼接的需求。
原因说明
R plotmath表达式语法中,两个文本连接运算符的作用存在区别:
~:在两个相邻排版元素之间插入一个标准空格*:直接拼接两个相邻排版元素,不插入任何间隔
原代码使用~连接斜体文本和常规字符,是产生多余空格的直接原因。
修正方案
将标签表达式中的~替换为*即可,修正后的标签定义代码:
lbs[match("wordX", brk)] = expression(italic("word")*X) lbs[match("wordY", brk)] = expression(italic("word")*Y)
替换后重新运行绘图代码,即可得到两部分文本紧密拼接、字体格式符合要求的图例标签。
内容的提问来源于stack exchange,提问作者abraham
相关产品推荐
相关产品推荐

