前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[R包分享] ggtextcircle绘制环状文本

[R包分享] ggtextcircle绘制环状文本

作者头像
R语言数据分析指南
发布2024-07-02 16:16:36
850
发布2024-07-02 16:16:36
举报
文章被收录于专栏:R语言数据分析指南

欢迎关注R语言数据分析指南公众号

本节来介绍一个简单的R包:ggtextcircle,主要用来制作环状文本,代码及数据均来自作者官网文档,更多详细内容请参考官方文档。

官方文档

https://github.com/nrennie/ggtextcircle

安装R包

代码语言:javascript
复制
devtools::install_github("nrennie/ggtextcircle")
# unlink(tempdir(), recursive = TRUE) 清除临时文件与缓存
library(tidyverse)
library(ggtextcircle)

该包主要有两个函数组成,下面来解析一下

代码语言:javascript
复制
compute_panel_textcircle <- function(
    data,
    scales,
    r = 3,
    x0 = 0,
    y0 = 0,
    start = 45,
    end = -45) {
  dplyr::mutate(
    data,
    theta = seq(((pi * start) / 180), pi * (2 + ((end) / 180)),
                length.out = nrow(data)
    ),
    x = x0 + r * cos(.data$theta),
    y = y0 + r * sin(.data$theta),
    angle = 180 + 360 * (.data$theta / (2 * pi))
  )
}
参数解释
  • data: 输入的数据框,通常包含需要注释的文本标签。
  • scales: 这个参数通常由 ggplot2 内部处理,在这里并没有具体使用。
  • r: 圆的半径,默认为 3。这是文本标签围绕的圆的大小。
  • x0: 圆心的 x 坐标,默认为 0。
  • y0: 圆心的 y 坐标,默认为 0。
  • start: 起始角度,默认为 45 度。表示第一个文本标签的起始位置。
  • end: 结束角度,默认为 -45 度。表示最后一个文本标签的位置。
函数功能:

这个函数的主要目的是生成每个文本标签在圆上的坐标和角度,以便它们可以围绕圆形排列。它使用以下步骤完成

  • 1.计算角度 (theta):使用 seq 函数生成一系列等间隔的角度,从起始角度 start 到结束角度 end。这些角度是以弧度表示的,因为三角函数(cos 和 sin)接受弧度作为参数。
  • 2.计算 x 和 y 坐标:使用极坐标公式将角度转换为笛卡尔坐标: • x = x0 + r * cos(theta):根据角度和半径计算每个标签的 x 坐标。 • y = y0 + r * sin(theta):根据角度和半径计算每个标签的 y 坐标。
  • 3.计算角度 (angle):将角度转换为度数,并调整为适合文本标签的角度。这是为了使文本标签正确地沿着圆弧排列。
代码语言:javascript
复制
StatTextcircle <- ggplot2::ggproto(
  `_class` = "StatTextcircle",
  `_inherit` = ggplot2::Stat,
  required_aes = c("label"),
  compute_panel = compute_panel_textcircle,
  default_aes = ggplot2::aes(
    x = ggplot2::after_stat(x),
    y = ggplot2::after_stat(y)
  )
)

使用 ggproto 定义了一个新的 ggplot2 统计对象 StatTextcircle。这个对象继承自 ggplot2 的 Stat 类,并定义了一些自定义的行为和属性,用于在 ggplot2 中实现圆形文本布局。

代码语言:javascript
复制
stat_textcircle <- function(geom = ggplot2::GeomText,
                            mapping = NULL,
                            data = NULL,
                            position = "identity",
                            na.rm = FALSE,
                            hjust = 1,
                            show.legend = NA,
                            inherit.aes = TRUE, ...) {
  ggplot2::layer(
    stat = StatTextcircle,
    geom = geom,
    data = data,
    mapping = mapping,
    position = position,
    show.legend = show.legend,
    inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, hjust = hjust, ...)
  )
}

geom_textcircle <- stat_textcircle

stat_textcircle 函数是一个自定义的统计变换函数,用于计算文本注释在圆形布局中的位置。它使用一个自定义的统计对象 (StatTextcircle) 来创建一个新的 ggplot2 图层,这个对象计算文本标签的位置和角度,使它们形成一个圆形。

关键部分:
  • 1.geom:指定用于显示数据的几何对象。默认情况下设置为 ggplot2::GeomText,这意味着文本注释。
  • 2.mapping:通过 aes() 或 aes_() 创建的美学映射。这个参数描述了数据中的变量如何映射到视觉属性。
  • 3.data:要显示的数据。
  • 4.position:指定图层中几何对象的位置调整方式。默认值为 "identity",即不进行位置调整。
  • 5.na.rm:逻辑值,是否移除缺失值。默认值为 FALSE。
  • 6.hjust:文本水平对齐方式,默认值为 1。
  • 7.show.legend:逻辑值,是否在图例中显示这个图层,默认值为 NA。
  • 8.inherit.aes:逻辑值,是否继承全局美学映射,默认值为 TRUE。
  • 9.…:其他传递给层的参数。

实际案例

代码语言:javascript
复制
births <- read_csv("births.csv")
deaths <- read_csv("deaths.csv")
代码语言:javascript
复制
ggplot() +
  geom_textcircle(
    data = dplyr::filter(births, year_birth >= 1900),
    mapping = aes(label = person),
    colour = "#35978f",
    r = 6,
    size = 2.5
  )+
  geom_textcircle(
    data = dplyr::filter(deaths, year_death >= 1900),
    mapping = aes(label = person),
    colour = "#bf812d",
    r = 3,
    size = 2.5
  ) +
  scale_x_continuous(limits = c(-8, 8)) +
  scale_y_continuous(limits = c(-8, 8)) +
  coord_fixed() +
  theme_void()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言数据分析指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欢迎关注R语言数据分析指南公众号
  • 官方文档
  • 安装R包
    • 参数解释
      • 函数功能:
        • 关键部分:
        • 实际案例
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档