首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:以图像为标签的圆圈和弦图?

R:以图像为标签的圆圈和弦图?
EN

Stack Overflow用户
提问于 2017-06-01 18:27:54
回答 1查看 640关注 0票数 0

是否可以将图像放置在circlize chordDiagram的标签所在的位置?

例如,我手动将大陆的SVG轮廓放在标签上。我想知道是否有一种可编程的方法来实现这一目标。

下面是一个我希望能够添加图像标签的入门示例。请注意,在circlize站点上有一个示例,它似乎执行了i 想要的操作。

但我不能把它和这个例子结合起来:

代码语言:javascript
复制
mat = matrix(sample(100, 25), 5)
rownames(mat) = letters[1:5]
colnames(mat) = letters[1:5]

library(circlize)
chordDiagram(mat, directional = TRUE, transparency = 0.5)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-06 12:07:26

在您的示例中,您需要在圆圈之外创建一个空轨道,然后返回到这个空轨道以添加光栅图像。

在下面的示例中,使用preAllocateTracks参数来定义应该放置多少空轨道。有关此论点的更多解释,请参阅:book/book/advanced-usage-of-chorddiagram.html#organization-of-tracks

代码语言:javascript
复制
mat = matrix(sample(100, 25), 5)
rownames(mat) = letters[1:5]
colnames(mat) = letters[1:5]

library(circlize)

library(png)
tmp = tempfile()
download.file("https://www.google.de/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png", tmp)
image = as.raster(readPNG(tmp))
ratio = ncol(image)/nrow(image)

chordDiagram(mat, directional = TRUE, transparency = 0.5,
    preAllocateTracks = 1)

circos.track(track.index = 1, panel.fun = function(x, y) {
    xcenter = get.cell.meta.data("xcenter")
    ycenter = get.cell.meta.data("ycenter")

    pos = circlize:::polar2Cartesian(circlize(xcenter, ycenter))

    rasterImage(image, 
        xleft = pos[1, 1] - 0.05*ratio,
        ybottom = pos[1, 2] - 0.05,
        xright = pos[1, 1] + 0.05*ratio,
        ytop = pos[1, 2]+ 0.05)
}, bg.border = NA)

由于rasterImage()有一个允许旋转图像的angle参数,但旋转相对于图像的左下角,而不是图像的中心,因此旋转图像也是可能的,但不容易让它们面对圆周的中心。

编辑:我在包中添加了一个新的函数circos.raster() (版本>= 0.4.1),这使得添加光栅图像更容易。

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

https://stackoverflow.com/questions/44314651

复制
相关文章

相似问题

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