R:用图像作为标签圈出和弦图?
R: circlize chord diagram with images as labels?
是否可以将图像放在 circlize
chordDiagram
的标签所在的位置?
例如,我手动将各大洲的 SVG 轮廓放在标签上。我想知道是否有一种编程方式可以实现这一目标。
这是一个入门示例,我希望能够向其添加图像标签。请注意,circlize
网站上有一个示例似乎可以执行我 want:
但我不能将它与这个例子结合起来:
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
参数允许旋转图像但旋转是相对的到图像的左下角而不是图像的中心。
编辑:我在包中添加了一个新函数 circos.raster()
(版本 >= 0.4.1),这使得添加光栅图像更容易。
是否可以将图像放在 circlize
chordDiagram
的标签所在的位置?
例如,我手动将各大洲的 SVG 轮廓放在标签上。我想知道是否有一种编程方式可以实现这一目标。
这是一个入门示例,我希望能够向其添加图像标签。请注意,circlize
网站上有一个示例似乎可以执行我 want:
但我不能将它与这个例子结合起来:
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
参数允许旋转图像但旋转是相对的到图像的左下角而不是图像的中心。
编辑:我在包中添加了一个新函数 circos.raster()
(版本 >= 0.4.1),这使得添加光栅图像更容易。