[英]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.