簡體   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