在R中具有重叠端点的chordDiagram()

k4emjkb1  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(147)

我尝试使用R中circlize包中的chordDiagram()函数在R中生成一个弦图的修改版本。
假设我们有这样一个简单的例子(关于包的文档):

require(circlize)
df = expand.grid(letters[1:3], LETTERS[1:4])
df$value = 1
df$value2 = 3 
chordDiagram(df[, 1:3])

输出将非常简单:

现在,问题是:让我们假设我需要使两个“端点”重叠来表示一个交叉点,例如,从b--〉A出发的带状线和从a--〉A出发的带状线,这样它们就在同一个扇区结束,并相互“合并”(如下图所示)。

这可能吗?我在文档中没有找到任何示例,也无法通过调整选项来执行此任务。
希望我说得够清楚了。谢谢你的努力。

2ul0zpep

2ul0zpep1#

如果我理解正确的话,这是可能的。这是circlize的一个例子,我无耻地复制了它来证明我的意思。

library(circlize)

routes = data.frame(Origin = c("GMP","CTS", "MEL","HND","BOM","SGN","PEK","TPE",
                               "OKA","SUB","DPS","JED","ITM","PEK","CAN","CUN",
                               "PEK","BNE","CGK","SHA"),
                    Destination = c("CJU","HND","SYD","FUK","DEL","HAN","SHA",    
                                    "HKG","HND","CGK","CGK","RUH","HND","CTU",
                                    "PEK","MEX","SZX","SYD","SIN","CAN"),
                    Passengers = c(14L,10L,9L,9L,7L,7L,7L,6L,6L,6L,6L,6L,
                                   5L,5L,5L,5L,5L,5L,5L,5L)
         )
  
chordDiagram(routes, annotationTrack = c("name", "grid"))

pkmbmrz7

pkmbmrz72#

如果我没理解错的话,你想在图中做重叠的部分,比如S3 -> E2S2 -> E2,你创建一个矩阵,它的格式可以让你在图中得到重叠的路径,我将用下面的代码给予你一个例子:
首先创建一个矩阵,其中S和E具有不同的值:

library(circlize)
set.seed(999)
mat = matrix(sample(18, 18), 3, 6) 
rownames(mat) = paste0("S", 1:3)
colnames(mat) = paste0("E", 1:6)
mat

   E1 E2 E3 E4 E5 E6
S1  4 14 13 17  5  2
S2  7  1  6  8 12 15
S3  9 10  3 16 11 18

接下来,创建一个 Dataframe ,其列格式为字符从到另一个字符(带值),以便更容易地检查模式:

df = data.frame(from = rep(rownames(mat), times = ncol(mat)),
                to = rep(colnames(mat), each = nrow(mat)),
                value = as.vector(mat),
                stringsAsFactors = FALSE)

   from to value
1    S1 E1     4
2    S2 E1     7
3    S3 E1     9
4    S1 E2    14
5    S2 E2     1
6    S3 E2    10
7    S1 E3    13
8    S2 E3     6
9    S3 E3     3
10   S1 E4    17
11   S2 E4     8
12   S3 E4    16
13   S1 E5     5
14   S2 E5    12
15   S3 E5    11
16   S1 E6     2
17   S2 E6    15
18   S3 E6    18

使用mat绘制输出:

chordDiagram(mat)

正如您所看到的,S3 -> E2S2 -> E2的路径有一些重叠。

相关问题