Я изучаю, как создавать круговые графики в R, похожие на CIRCOS. Я использую пакет circlize для рисования связей между парами отправления и назначения на основе того, был ли рейс OB, Inbound и Return. Логика для данных на самом деле не имеет значения, это просто игрушечный пример
Я получил график для работы на основе приведенного ниже кода, который работает на основе следующей логики.
- Возьмите мои данные, объедините столбец назначения с типом рейса
- Преобразуйте в матрицу и подайте начало координат и новый столбец в circlize
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()
Мне очень нравится сюжет, но хотелось бы его немного изменить. Например, FI (то есть Финляндия) имеет 3 измерения на диаграмме FI IB, FI OB и FI. Я хотел бы объединить их все в FI, если это возможно, и различать три типа рейсов, используя цветовую схему, стрелки или даже добавив дополнительный трек, который действует как зонтик для рейсов IB OB и RETURN.
Так, например,
- FI OB будет помещен в FI, но будет иметь одностороннюю стрелку на GB, чтобы обозначить OB
- FI IB будет помещен в FI, но будет иметь стрелку в одну сторону в FI
- FI RETURN (если он существует) будет иметь двойную стрелку
Может ли кто-нибудь помочь, кто-нибудь видел что-нибудь подобное было сделано раньше? Конечный результат должен иметь страны на графике только один раз, чтобы кто-то мог очень быстро увидеть, в какие страны совершается наибольшее количество рейсов.
Я пытался следить за другими сообщениями, но боюсь, теряются, когда они переходят к более продвинутым вещам
Большое спасибо за уделенное время