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

如何用R基础绘图展示Hershey字体astrology样式并替换R为Rlogo?

在Base R中绘制Hershey Astrology字体并自定义替换字符

1. 基础绘制:用Base R还原Astrology字体文本

我们可以复用hershey包生成的坐标数据,在Base R中完成和ggplot版本一致的绘图:

library(hershey)

# 生成字符坐标数据框
string_df <- create_string_df(text = "CRAN", font = 'astrology')

# 初始化等比例画布,隐藏坐标轴与标签
plot(0, 0, type = "n", 
     xlim = range(string_df$x), ylim = range(string_df$y),
     asp = 1, axes = FALSE, xlab = "", ylab = "")

# 按字符+笔画分组,绘制路径和点
by(string_df, interaction(string_df$char_idx, string_df$stroke), function(stroke_data) {
  lines(stroke_data$x, stroke_data$y)
  points(stroke_data$x, stroke_data$y, cex = 0.5)
})

要实现替换需求,我们可以跳过R字符的绘制,在对应位置直接嵌入Rlogo:

library(hershey)
library(magick)

# 生成字符坐标数据
string_df <- create_string_df(text = "CRAN", font = 'astrology')

# 初始化画布
plot(0, 0, type = "n", 
     xlim = range(string_df$x), ylim = range(string_df$y),
     asp = 1, axes = FALSE, xlab = "", ylab = "")

# 绘制除R之外的所有字符(char_idx=2对应"CRAN"中的R)
non_r_data <- subset(string_df, char_idx != 2)
by(non_r_data, interaction(non_r_data$char_idx, non_r_data$stroke), function(stroke_data) {
  lines(stroke_data$x, stroke_data$y)
  points(stroke_data$x, stroke_data$y, cex = 0.5)
})

# 获取R字符的坐标范围,用于定位logo
r_char_bounds <- subset(string_df, char_idx == 2)
x_left <- min(r_char_bounds$x)
y_bottom <- min(r_char_bounds$y)
x_right <- max(r_char_bounds$x)
y_top <- max(r_char_bounds$y)

# 读取Rlogo并绘制到对应位置
r_logo <- image_read_svg("https://www.r-project.org/logo/Rlogo.svg")
r_logo_raster <- as.raster(r_logo)
rasterImage(r_logo_raster, x_left, y_bottom, x_right, y_top)

注意事项:

  • 若未安装magick包,先运行install.packages("magick")完成安装
  • magick包支持直接读取SVG格式的logo,无需额外格式转换
  • 通过char_idx定位目标字符,若文本内容变化,需对应调整char_idx的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:17:12