如何用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) })
2. 自定义替换:将R字符替换为Rlogo
要实现替换需求,我们可以跳过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
相关产品推荐
相关产品推荐

