【发布时间】:2017-04-10 15:28:15
【问题描述】:
在使用 circlize 包中的 chordDiagram() 函数时返回错误消息时,我需要一些帮助。
我正在处理渔业上岸问题。渔船在一个港口(母港PORT_DE)开始航行,然后在另一个港口(上岸港口PORT_LA)上岸(在这种情况下为扇贝)。我正在尝试使用circlize 包绘制和弦图,以可视化端口之间的着陆流。我有 161 个唯一端口,端口名称存储为 character 字符串。
在调用chordDiagram() 函数绘制和弦图之前,我将相关列存储在一个虚拟对象(m)中。
# Store relevant column
m <- data.frame(PORT_DE = VMS_by_trips$PORT_DE_Label,
PORT_LA = VMS_by_trips$PORT_LA_Label,
SCALLOP_W = VMS_by_trips$Trip_SCALLOP_W)
head(m)
# PORT_DE PORT_LA SCALLOP_W
# 1 Arbroath Arbroath 2.147143
# 2 Eyemouth Aberdeen 8.791970
# 3 Buckie Aberdeen 2.025833
# 4 Montrose Aberdeen 8.268540
# 5 Aberdeen Aberdeen 1.358286
# 6 Peterhead Aberdeen 0.797500
然后我使用dcast() 创建一个邻接矩阵并重命名行。
require(reshape2)
m <- as.matrix(dcast(m, PORT_DE ~ PORT_LA, value.var = "SCALLOP_W", fun.aggregate = sum))
dim(m) #adjecency matrix represents port pairs
#[1] 153 138
row.names(m) <- m[,1]
m <- m[,2:dim(m)[2]]
class(m) <- "numeric"
最后,我调用绘图函数 chordDiagram() 。
library(circlize)
chordDiagram(m)
很遗憾,这会导致错误消息。
Error in `[.data.frame`(df, c(1, 2, 5)) : undefined columns selected
如果我用数字替换行名和列名,函数就会运行,并返回正确的绘图。
row.names(m) <- 1:153
colnames(m) <- 1:137
任何想法如何使用实际端口名称运行函数?
我已经尝试删除特殊字符,将" " 空格替换为"_" 下划线,保留较少数量的字符,只保留几个端口对。不幸的是,同样的错误不断出现。任何帮助表示赞赏。
请注意,自从发布这个问题以来,我已经设法创建了 需要可视化。这是另一个相关问题的链接, 其中还包括调整和弦各种设置的代码 图。
Adjust highlight.sector() width and placement - Chord diagram (circlize package) in R
【问题讨论】:
-
chordDiagram将适用于数据框和矩阵。请参阅?chordDiagramFromDataFrame -
@gjabel 感谢您的及时回复。如果我设法解决自己,我会在这里查看并回复。
-
我用你附加的代码试过你的六行数据(
head(m)),没有出现错误。你能附上完整的数据集吗?另一方面,chordDiagram()可以直接应用于数据框,无需将其转换为矩阵。 -
@ZuguangGu 感谢您通过电子邮件回复我的问题。为了stackoverflow社区的利益,我现在已经在下面发布了我的问题的答案。