You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggplot2中如何将文本沿密度曲线等任意曲线路径放置?

问题描述

请问在ggplot2中,是否可以将文本沿着密度线或任意路径放置?我想实现两类效果:

  • 一类是将单个标签沿曲线排布,类似xkcd漫画1835、1950(中间面板)、1392、2234(中间面板)的风格
  • 另一类是用重复的文本构成线条,类似xkcd #930的效果

注意:我所指的并非手绘xkcd风格,也不是在图表顶部放置水平标签。

我知道可以通过annotate或geom_text添加水平文本,但我希望实现文本弯曲、贴合数据曲线的效果。同时我也想了解这种「文本沿线条排布」的风格是否有专门名称?

以下是使用annotate(...)绘制的ggplot2示例图:
含水平文本的ggplot图表

下图是在Inkscape中修改上述图表、添加曲线文本后的效果:
修改后文本沿曲线路径排列的图表


补充示例数据

3月、4月两次试运行的示例数据如下:

df <- data.frame(
  monthly_run = c('March', 'March', 'March', 'March', 'March', 'March', 'March', 
                  'March', 'March', 'March', 'March', 'March', 'March', 'March', 
                  'April', 'April', 'April', 'April', 'April', 'April', 'April', 
                  'April', 'April', 'April', 'April', 'April', 'April', 'April'),
  duration    = c(36, 44, 45, 48, 50, 50, 51, 54, 55, 57, 60, 60, 60, 60, 30,
                  40, 44, 47, 47, 47, 53, 53, 54, 55, 56, 57, 69, 77)
  )

ggplot(df, aes(x = duration, group = monthly_run, color = monthly_run)) + 
  geom_density() + 
  theme_minimal()

解答

这种文本沿路径排布的效果通常叫做路径文本或者曲线文本,如果是用重复文本填充线条的形式也被称为文本线条。

你要的两类效果都可以通过geomtextpath包直接在ggplot2中实现,不需要导出到第三方设计软件修改。

首先安装依赖包:

install.packages("geomtextpath")

单个标签沿密度线排布

直接将原代码的geom_density替换为geom_textdensity,指定标签内容即可:

library(ggplot2)
library(geomtextpath)

ggplot(df, aes(x = duration, group = monthly_run, color = monthly_run)) + 
  geom_textdensity(aes(label = monthly_run), size = 4, hjust = 0.7) + 
  theme_minimal()

可以通过hjust调整标签在曲线上的横向位置,vjust调整标签和曲线的垂直距离,包会自动避开曲线极值点避免文字变形重叠。

重复文本构成整条曲线

设置repeat_text = TRUE和文本间距参数即可实现整条线由重复文本组成的效果:

ggplot(df, aes(x = duration, group = monthly_run, color = monthly_run)) + 
  geom_textpath(aes(label = monthly_run), stat = "density", 
                size = 3, spacing = 50, repeat_text = TRUE) + 
  theme_minimal()

如果需要同时保留原密度线,叠加一层半透明的geom_density即可。

其他可调参数

  • 加text_only = TRUE可以只显示文本、隐藏底层线条
  • 支持任意自定义路径,只要传入路径的x/y坐标就能生成任意形状的曲线文本
  • 文本的字体、颜色、大小等参数和原生geom_text完全兼容,调整方式一致

内容的提问来源于stack exchange,提问作者byteit101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:06:06