如何将SVG/XML图片数据转换为dataframe以使用ggplot2绘图
解决方案
你可以通过遍历Picture对象的paths插槽提取所有路径的坐标与样式属性,拼接得到可用于ggplot2绘图的dataframe,具体实现代码如下:
1. 定义转换函数
library(grImport) library(tidyverse) picture_to_df <- function(pic_obj) { all_path_df <- list() # 遍历所有路径元素 for (i in seq_along(pic_obj@paths)) { cur_path <- pic_obj@paths[[i]] # 提取坐标与属性 cur_df <- data.frame( x = cur_path@x, y = cur_path@y, point_type = names(cur_path@x), path_id = i, fill_rgb = cur_path@rgb, line_width = ifelse(length(cur_path@lwd) == 0, NA, cur_path@lwd), line_type = ifelse(length(cur_path@lty) == 0, NA, cur_path@lty) ) all_path_df[[i]] <- cur_df } # 合并所有路径数据 do.call(rbind, all_path_df) } # 转换你的lc对象 lc_df <- picture_to_df(lc)
2. 用ggplot2绘图
ggplot(lc_df, aes(x = x, y = y)) + # 按路径分组绘制多边形 geom_polygon(aes(group = path_id, fill = fill_rgb), linewidth = 0.1) + # 直接使用提取的原始填充色 scale_fill_identity() + # 保持坐标比例和原图一致 coord_equal() + # 清空背景等冗余元素 theme_void()
3. 特定区域缩放
只需要给coord_equal添加x/y轴范围参数即可实现局部缩放,比如:
ggplot(lc_df, aes(x = x, y = y)) + geom_polygon(aes(group = path_id, fill = fill_rgb), linewidth = 0.1) + scale_fill_identity() + # 自定义缩放的x、y范围,替换为你需要的数值即可 coord_equal(xlim = c(600, 700), ylim = c(9800, 9950)) + theme_void()
内容的提问来源于stack exchange,提问作者umair durrani
相关产品推荐
相关产品推荐

