首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SVG路径/多边形坐标中读取

在SVG路径/多边形坐标中读取
EN

Stack Overflow用户
提问于 2020-07-13 18:34:11
回答 1查看 556关注 0票数 2

我试图将用插画师创建的SVG文件中的路径坐标导入到R中。

我想我可以用grImport2将SVG读入R中,理论上这应该是导入SVG文件,但我认为它们可能只处理由Cairo设备生成的SVG文件。

假设我想导入以下.svg文件:

这里是我加载SVG文件的尝试。如果我正确地阅读了内容,它应该只包含一个(复杂的)路径。此警告与加载创建的SVG文件时得到的警告相同。请注意,下面的代码将被卡住一段时间!

代码语言:javascript
复制
file <- "https://upload.wikimedia.org/wikipedia/commons/d/db/Brain_Drawing.svg"
download.file(file, tmp <- tempfile(fileext = ".svg"))

# Don't run the following line, it will get your R session stuck!
x <- grImport2::readPicture(tmp)
#> Warning message:
#> In checkValidSVG(doc, warn = warn) :
#>   This picture was not generated by Cairo graphics; errors may result

unlink(tmp)

我理想的输出将是一个data.frame,它至少包含(锚)点的xy坐标,以及一些可以区分不同路径的元数据。我不需要曲线和弧线插值之类的。

还有其他我不知道的包可能会导入这个程序吗?有没有办法把SVG转换成我能读到的R?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-13 21:15:05

不错的问题青少年品牌-谢谢你的帖子。问题似乎是让grImport2阅读非开罗svg。因此,实际上,我们只需要另一个翻译步骤:使用包rsvg在非开罗svg中读取,并使用Cairo编写相同的内容。奇怪的是,它有一个函数来完成这个任务,称为rsvg_svg。因此,我们可以在一行中以Picture对象的形式读取远程文件,甚至无需创建本地tmp文件:

代码语言:javascript
复制
file <- "https://upload.wikimedia.org/wikipedia/commons/d/db/Brain_Drawing.svg"
svg  <- grImport2::readPicture(rawToChar(rsvg::rsvg_svg(file)))

不幸的是,Picture是一个深列的S4对象,它比grob树更难导航。我相信像你这样有能力的人可以强迫它进入一个数据框架,但这并不简单,我不会在这里尝试。至少这些组件本身看起来很容易收获:

代码语言:javascript
复制
svg@content[[1]]@content[[1]]@d@segments[[3]]

#> An object of class "PathCurveTo"
#> Slot "x":
#>  [1]  791.8359 789.5286 787.1382 784.6293 782.0041 779.2962 776.5600 773.8555 771.2318 
#>   [10] 768.712 766.2875 764.8359
#> 
#> Slot "y":
#>   [1] 8.191406 8.209760 8.239691 8.282891 8.340521 8.412835 8.499026 8.597442 8.706126 
#>  [10] 8.82357  8.949580 9.031250

无论如何,有一些很好的实用程序函数可以让您做一些很酷的事情,比如:

代码语言:javascript
复制
brainGrob <- grImport2::pictureGrob(svg)
ggplot2::ggplot() + ggplot2::geom_point(ggplot2::aes(1, 1))
grid::grid.draw(brainGrob)

我以前从未见过在网格中绘制任意SVG,因此我很高兴地发现,这是由您的问题提示的。再次感谢。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62882121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档