Joh*_*ith 1 plot r chord-diagram
我正在学习如何在R中创建圆形图,类似于CIRCOS Im使用包circlize根据航班是OB,入站和返回来绘制起点和目的地对之间的链接.数据的逻辑并不重要,它只是一个玩具的例子
我已根据下面的代码获得了基于以下逻辑工作的情节
library(dplyr)
library(circlize)
# Create Fake Flight Information in a table
orig = c("IE","GB","US","ES","FI","US","IE","IE","GB")
dest = c("FI","FI","ES","ES","US","US","FI","US","IE")
direc = c("IB","OB","RETURN","DOM","OB","DOM","IB","RETURN","IB")
mydf = data.frame(orig, dest, direc)
# Add a column that combines the dest and direction together
mydf <- mydf %>%
mutate(key = paste(dest,direc)) %>%
select (orig, key)
# Create a Binary Matrix Based on mydf
mymat <- data.matrix(as.data.frame.matrix(table(mydf)))
# create the objects you want to link from to in your diagram
from <- rownames(mymat)
to <- colnames(mymat)
# Create Diagram by suppling the matrix
par(mar = c(1, 1, 1, 1))
chordDiagram(mymat, order = sort(union(from, to)), directional = TRUE)
circos.clear()
Run Code Online (Sandbox Code Playgroud)
我很喜欢这个情节,但想稍微改变一下.例如FI(芬兰)在FI IB,FI OB和FI图上有3个测量值.如果可能的话,我想将它们全部归入FI,并使用颜色方案,箭头或甚至添加额外的轨道来区分三种类型的航班,这些轨道充当IB OB和RETURN航班的保护伞
所以例如,
任何人都可以帮助,有没有人见过以前做过类似的事情?最终结果应该只是让一些国家出现在地块上,以便有人能够非常快速地看到哪些国家拥有最多的航班
我曾尝试过其他帖子,但我担心当他们转向更高级的东西时我会迷路
非常感谢您的宝贵时间
首先,我认为IE-FI-IB您的数据中存在重复的记录().
我将首先附上代码和图,然后再解释一下.
df = data.frame(orig, dest, direc, stringsAsFactors = FALSE)
df = unique(df)
col = c("IB" = "red",
"OB" = "blue",
"RETURN" = "orange",
"DOM" = "green")
directional = c("IB" = -1,
"OB" = 1,
"RETURN" = 2,
"DOM" = 0)
diffHeight = c("IB" = -0.04,
"OB" = 0.04,
"RETURN" = 0,
"DOM" = 0)
chordDiagram(df[1:2], col = col[df[[3]]], directional = directional[df[[3]]],
direction.type = c("arrows+diffHeight"),
diffHeight = diffHeight[df[[3]]])
legend("bottomleft", pch = 15, legend = names(col), col = col)
Run Code Online (Sandbox Code Playgroud)
首先,您需要使用circlize的开发版本,您可以通过它来安装它
devtools::install_github("jokergoo/circlize")
Run Code Online (Sandbox Code Playgroud)
在这个新版本中,chordDiagram()支持输入变量作为数据框并为链接绘制双头箭头(刚读完帖子:)).
在上面的代码中,col,directional,direction.type和diffHeight都可以设定为对应于行的载体df.
当directional参数输入chordDiagram()设置为2时,相应的链接将有两个方向.然后如果direction.type包含箭头,则会有一个双头箭头.
由于diffHeight是一个对应于行的向量df,如果要通过箭头和根的偏移来显示单个链接的方向,则需要将这两个选项合并为单个字符串,如示例代码所示"arrows+diffHeight".
默认情况下,链接的方向是从第一列到第二列.但在你的情况下,IB意味着反转的方向,所以我们需要设置diffHeight一个负值来反转默认方向.
最后,我观察到你有相同扇区(ES-ES-DOM和US-US-DOM)开始和结束的链接,你可以使用self.link参数来控制如何表示这种自我链接.self.link在下图中设置为1.