在R绘图中实现竖排CJK文字添加的便捷方法有哪些?
R 图表竖排CJK文字简便实现方案
目前有两种比手动调用ragg包OpenType特性更简便的实现方式,同时覆盖点/多边形标注、任意文本块两类使用场景:
方案1:ggplot2生态下使用ggtext包
不需要手动配置vrt2特性,直接通过CSS样式控制竖排逻辑:
- 点/多边形标注:调用
geom_richtext(),指定竖排样式即可实现自动适配竖排字形,不需要额外旋转调整
示例代码:library(ggplot2) library(ggtext) # 基础散点图示例 ggplot(mtcars, aes(mpg, wt)) + geom_point() + # 在坐标(20, 3)处添加竖排标注 geom_richtext( aes(x = 20, y = 3, label = "<span style='writing-mode: vertical-rl;'>竖排标注测试</span>"), fill = NA, label.colour = NA, # 去掉标注的背景和边框 angle = 90 # 适配坐标轴方向 ) - 任意文本块:调用
annotation_richtext(),指定放置坐标即可,支持混合横竖排文本、标点自动适配竖排排版规则,适合做图表说明类的文本块。
方案2:基础绘图系统原生实现
如果不需要使用ggplot2,基础绘图的text()函数搭配支持竖排的CJK字体即可直接实现,不需要额外加载第三方渲染包:
# 预先指定支持竖排的CJK字体,例如Noto Sans CJK SC、思源黑体、微软雅黑、苹方等 par(family = "Noto Sans CJK SC") # 基础绘图 plot(1:10, 1:10, type = "n") # 点标注 points(5, 5) text(5, 5.2, labels = "竖排测试标注", srt = 90, adj = c(0.5, 0.5)) # 任意位置文本块 text(8, 8, labels = "独立竖排文本块", srt = 90, adj = c(0, 0), cex = 1.2)
通用注意事项
- 两种方案都要求使用的字体本身内置竖排CJK字形,常用的开源及系统预装CJK字体基本都满足该要求
- 若需要实现从左到右的竖排排版,将
writing-mode参数改为vertical-lr(ggtext方案),或将srt参数设置为270(基础绘图方案)即可
内容的提问来源于stack exchange,提问作者Sjiveru
相关产品推荐
相关产品推荐

