繁体   English   中英

R:将和弦图以图像作为标签进行圆化?

[英]R: circlize chord diagram with images as labels?

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

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

在此处输入图片说明

这是一个入门示例,我希望能够向其添加图像标签。 请注意, circlize网站上有一个示例似乎circlize我的要求

在此处输入图片说明

但我无法将其与以下示例结合使用:

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)

在您的示例中,您需要在圆的最外面创建一个空轨迹,然后再返回到该空轨迹以添加栅格图像。

在下面的示例中, preAllocateTracks参数用于定义应放置多少空轨道。 有关此参数的更多说明,请参阅:http: //zuguang.de/circlize_book/book/advanced-usage-of-chorddiagram.html#organization-of-tracks

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参数,该参数允许旋转图像,但旋转是相对于图像的左下角,而不是相对于图像的左下角图像的中心。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM