【问题标题】:R: circlize chord diagram with images as labels?R:用图像作为标签圈出和弦图?
【发布时间】:2017-11-03 00:32:08
【问题描述】:

是否可以将图像放置在 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)

【问题讨论】:

    标签: r graphics chord-diagram circlize


    【解决方案1】:

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

    在以下示例中,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(),这使得添加光栅图像更容易。

    【讨论】:

      猜你喜欢
      • 2022-07-07
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 2021-04-10
      • 1970-01-01
      相关资源
      最近更新 更多