2015-08-09 5 views
0

Im учится создавать круговые графики в R, аналогичные CIRCOS Я использую пакет, чтобы нарисовать ссылки между парами происхождения и назначения, исходя из того, был ли полет OB, входящим и возвращаемым. Логика Ф.О. на оленьей коже данных действительно имеет значения, его просто игрушка примерR Круговые диаграммы Chord

Я получил участок для работы на основе коды, ниже которого работает на основе следующей логике

  1. Возьмите мои данные, объединить столбец назначения с типом полета
  2. Преобразовать в матрицу и кормить происхождение и новый столбец в circlize

Reference

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, но имеют одну сторону стрелку GB для обозначения OB
  • Ф. И. Б. будет помещен в FI, но есть один путь стрелка в FI
  • FI RETURN (если он существует) будет иметь двунаправленную стрелку

Может кто-нибудь помочь, Кто-нибудь видел что-нибудь подобное раньше? Конечный результат должен иметь только страны на участке один раз, чтобы кто-то мог видеть очень быстро, в каких странах наибольшее количество полетов.

Я пробовал следовать other posts, но я боюсь, что я заблудился, когда они перейдут на более продвинутый материал

Большого спасибо за ваше время

ответ

6

Во-первых, я думаю, что есть дублируется запись (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) 

enter image description here

Прежде всего, необходимо использовать версию развития circlize, для которого вы можете установить его

devtools::install_github("jokergoo/circlize") 

В этой новой версии, 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 на следующем рисунке.

enter image description here

+0

впечатляет и очень полезно! Я надеюсь, что Джон примет этот ответ, щелкнув V; ^) – irJvV

+1

Это блестяще, спасибо вам большое –

1

вам нужны стрелки, потому что цветовое кодирование в графе задает From/To истории уже (оТ Do -> цвета края от страны, является цветом ИЗ СТРАНЫ, ПРИХОДЯЩЕЙСЯ В СТРАНУ ДО, ЕСЛИ ОТ == ДО Свой собственный цвет возвращается на собственной базе (например, в США или ЕС)).

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") 
mydf = data.frame(orig, dest) 

# 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() 

кстати -> есть также OFFSET разница по краю, который говорит, если это FROM (широкой грани) или (меньший край)

+0

привет @irJvV, Большое спасибо за ваше предложение. Я думаю, было бы лучше, если бы у вас был другой трек за пределами страны, который действует как зонтик, чтобы показать IB OB и DOM. Его важно уметь различать тип полета для визуализации. –

+0

Привет, Джон, каким образом вы собираетесь использовать график? Как изображение, веб-страница или что-то еще? – irJvV

+0

В качестве изображения. Идея состоит в том, чтобы показать исходные пары назначения и тип полета. Для этого примера всего три, но на самом деле существует до 8 различных типов полетов. Спасибо за СМЕЩЕНИЕ, я не знал, что он существует –

Смежные вопросы