#r #visualization #categorical-data
#r #визуализация #категориальный-данные
Вопрос:
Я хочу отобразить множественное двумерное распределение в R вместо полного многомерного распределения. Следующий код, приведенный в виньетке пакета alluvial, использует график намыва для отображения полного многомерного распределения (класс, пол, возраст, выжившие) для набора данных Titanic.
require(dplyr)
require(alluvial)
tit <- as.data.frame(Titanic, stringsAsFactors = FALSE)
head(tit)
alluvial(tit[,1:4], freq=tit$Freq,
col = ifelse(tit$Survived == "Yes", "orange", "grey"),
border = ifelse(tit$Survived == "Yes", "orange", "grey"),
hide = tit$Freq == 0,
cex = 0.7)
Вместо визуализации полного многомерного распределения я хотел бы визуализировать двумерные распределения (класс, пол), (пол, возраст) и (Возраст, выживший), используя один аллювиальный график. Количество трех двумерных распределений равно
tit%>%group_by(Class,Sex)%>%summarize(Freq=sum(Freq))%>%ungroup()
tit%>%group_by(Sex,Age)%>%summarize(Freq=sum(Freq))%>%ungroup()
tit%>%group_by(Age,Survived)%>%summarize(Freq=sum(Freq))%>%ungroup()
Знаете ли вы, возможно ли это с использованием пакета alluvial или альтернативного?
Для этого конкретного примера использование аллювиального графика может показаться сомнительным. Но это полностью имеет смысл, когда переменные упорядочены и когда мы хотим визуализировать двумерные распределения (var1, var2), (var2, var3), …
Комментарии:
1. Я не понимаю, что вы ожидаете от результата
2. вы выполняете это:
tmp <- tit %>% group_by(Class, Sex) %>% summarize(Freq = sum(Freq)) %>% ungroup();alluvial(tmp[1:2], freq = tmp$Freq)
? для каждой пары переменных, которые вы написали?3. да, именно так, но с распределениями (класс, пол), (пол, возраст) и (Возраст, выживший) на одном и том же аллювиальном графике.
Ответ №1:
Чтобы настроить три аллювиальных графика вместе, вы можете сделать следующее.
Обратите внимание, что count
это dplyr
более компактная версия group_by
summarise
ungroup
.
library(dplyr)
library(alluvial)
tit <- as.data.frame(Titanic, stringsAsFactors = TRUE)
oldpar <- par(mfrow=c(1, 3)) # set up alignment
with(count(tit, Class, Sex , wt = Freq), alluvial(Class, Sex , freq = n))
with(count(tit, Sex , Age , wt = Freq), alluvial(Sex , Age , freq = n))
with(count(tit, Age , Survived, wt = Freq), alluvial(Age , Survived, freq = n))
par(oldpar) # reset par
Рекомендуется сбрасывать par
его каждый раз, когда вы его изменяете, поскольку это общий параметр, который может повлиять на другие части вашего кода.
Комментарии:
1. Большое спасибо, это здорово. Еще лучше было бы удалить повторяющиеся гистограммы (гистограмма для пола и гистограмма для возраста), но это может быть слишком сложным для достижения. Еще раз спасибо.