R:用图像作为标签来圈出和弦图?

时间:2017-06-01 18:27:54

标签: r graphics chord-diagram circlize

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

例如,我已根据标签手动放置了各大洲的SVG轮廓。我想知道是否有一种程序化的方法来实现这一目标。

enter image description here

以下是我希望能够添加图像标签的入门示例。请注意,circlize网站上有一个示例似乎可以执行want

enter image description here

但我无法将其与此示例结合起来:

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)

1 个答案:

答案 0 :(得分:1)

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

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

preAllocateTracks

enter image description here

旋转图像以使它们面向圆心也是可能的但不容易,因为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),这使得添加光栅图像更加容易。