chordDiagram()
circlize パッケージの強調表示されたセクターを調整するのに助けが必要です。
私は漁業の水揚げデータを扱っています。漁船はある港 (母港) から旅を始め、PORT_DE
別の港 (水揚げ港) に漁獲物を水揚げしますPORT_LA
。私はホタテの生きた重量をトン単位で扱っています(着陸SCALLOP_W
)。データフレームの簡単な例を次に示します。
PORT_DE PORT_LA SCALLOP_W
1 Aberdeen Aberdeen 116
2 Barrow Barrow 98
3 Douglas Barrow 127
4 Kirkcudbright Barrow 113
5 Brixham Brixham 69
6 Buckie Buckie 180
各ポート ( Name_short
) には、地域別 ( Region_lb
) および国別 ( Country_lb
) のラベルが付けられています。以下の例。
Name_short Country_lb Region_lb
1 Scalloway Scotland Shetland Isles
2 Scrabster Scotland North Coast
3 Buckie Scotland Moray Firth
4 Fraserburgh Scotland Moray Firth
5 Aberdeen Scotland North East
パッケージを使用して、港間の着陸の流れを視覚化するcircilze
ためにカスタマイズされたものを生成しました。chordDiagram
セクター間の間隔を調整することで、同じ国のポートのグループ化を含め、ほとんどの設定を調整しました (gap.after
設定を参照)。これが私のコードダイアグラムの現在の形です。
国ごとにセクターをハイライトする最後の仕上げを除けば、私が望むものはほぼ完成しました。同じ国の港を強調表示するために使用しようとしてhighlight.sector()
いますが、強調表示されたセクターの幅または配置を調整できません。現在、国のセクターは他のすべてのラベルと重複しています。以下の例:
色はランダムに生成されるため、2 つの図の間には異なる色があることに注意してください。
最終調整のお手伝いをお願いできますか?
以下に示す図を生成するためのコード:
# calculate gaps by country;
# 1 degree between ports, 10 degree between countries
gaps <- rep(1, nrow(port_coords))
gaps[cumsum(as.numeric(tapply(port_coords$Name_short, port_coords$Country_lb, length)))] <- 10
# edit initialising parameters
circos.par(canvas.ylim=c(-1.5,1.5), # edit canvas size
gap.after = gaps, # adjust gaps between regions
track.margin = c(0.01, 0)) # adjust bottom and top margin
# (blank area out of the plotting regio)
# Plot chord diagram
chordDiagram(m,
# manual order of sectors
order = port_coords$Name_short,
# plot only grid (no labels, no axis)
annotationTrack = "grid",
preAllocateTracks = 1,
# adjust grid width and spacing
annotationTrackHeight = c(0.03, 0.01),
# add directionality
directional=1,
direction.type = c("diffHeight", "arrows"),
link.arr.type = "big.arrow",
# adjust the starting end of the link
diffHeight = -uh(1, "mm"),
# adjust height of all links
h.ratio = 0.8,
# add link border
link.lwd = 1, link.lty = 1, link.border="gray35"
)
# add labels and axis manually
circos.trackPlotRegion(track.index = 1, panel.fun = function(x, y) {
xlim = get.cell.meta.data("xlim")
ylim = get.cell.meta.data("ylim")
sector.name = get.cell.meta.data("sector.index")
# print labels & text size (cex)
circos.text(mean(xlim), ylim[1] + .7, sector.name,
facing = "clockwise", niceFacing = TRUE, adj = c(0, 0.5), cex=0.6)
# print axis
circos.axis(h = "top", labels.cex = 0.5, major.tick.percentage = 0.2,
sector.index = sector.name, track.index = 2)
}, bg.border = NA)
# add additional track to enhance the visual effect of different groups
# Scotland
highlight.sector(port_coords$Name_short[which(port_coords$Country_lb == "Scotland")],
track.index = 1, col = "blue",
text = "Scotland", cex = 0.8, text.col = "white", niceFacing = TRUE)
# England
highlight.sector(port_coords$Name_short[which(port_coords$Country_lb == "England")],
track.index = 1, col = "red",
text = "England", cex = 0.8, text.col = "white", niceFacing = TRUE)
# Wales
highlight.sector(port_coords$Name_short[which(port_coords$Country_lb == "Wales")],
track.index = 1, col = "forestgreen",
text = "Wales", cex = 0.8, text.col = "white", niceFacing = TRUE)
# Isle of Man
highlight.sector(port_coords$Name_short[which(port_coords$Country_lb == "Isle of Man")],
track.index = 1, col = "darkred",
text = "Isle of Man", cex = 0.8, text.col = "white", niceFacing = TRUE)
# Rep. Ireland
highlight.sector(port_coords$Name_short[which(port_coords$Country_lb == "Rep. Ireland")],
track.index = 1, col = "darkorange2",
text = "Ireland", cex = 0.8, text.col = "white", niceFacing = TRUE)
# N.Ireland
highlight.sector(port_coords$Name_short[which(port_coords$Country_lb == "N.Ireland")],
track.index = 1, col = "magenta4",
text = "N. Ireland", cex = 0.8, text.col = "white", niceFacing = TRUE)
# re-set circos parameters
circos.clear()