Можете ли вы отследить и пометить один аллювий, используя пакет ggalluvial для ggplot2 в R? - PullRequest
1 голос
/ 29 января 2020

Я работаю над аллювиальной диаграммой в R, основанной на примере "учебных программ" в ggalluvial виньетка . Я хочу иметь возможность отслеживать одну когорту / аллювий (в наборе данных по основным предметам, один студент) по всей диаграмме, помечая аллювий на каждой оси. Однако я обнаружил, что он работает только с lode.guidance (в geom_flow), установленным на «зигзаг», и без других настроек.

Используя пример виньетки, вы можете пометить намыв учеником Идентификационный номер следующим образом. Единственные изменения, которые я сделал из примера виньетки, помечены комментариями:

    library(ggplot2)
    library(ggalluvial)

    data(majors)
    majors$curriculum <- as.factor(majors$curriculum)
    ggplot(majors,
       aes(x = semester, stratum = curriculum, alluvium = student,
           fill = curriculum, label = student)) + #changed from label = alluvium
    scale_fill_brewer(type = "qual", palette = "Set2") +
    geom_flow(stat = "alluvium", lode.guidance = "frontback",
            color = "darkgray") + #can change lode.guidance parameter here in geom_flow
    geom_stratum() +
    geom_text(stat = "alluvium", size = 3) #added this geom_text to get the label

, что приводит к следующей аллювиальной диаграмме:

(изображение несогласованных потоков с использованием фронтбека)

Есть некоторые несоответствия в показе движения аллювия (ученика) от оси к оси. Некоторые студенты «тасуются» при переходе от одной оси к другой. Например, в потоке от CURR3 до CURR5 ученик 10 становится учеником 2. В той же смене ученик 6 становится учеником 10 и т. Д. c.

Та же проблема возникает со всеми другими настройками lode.guidance (вперед, вправо, назад, влево, спереди назад, справа налево, сзади впереди, слева направо), за исключением «зигзага», который показывает это отлично. (изображение правильных потоков с использованием зигзага)

Мой вопрос такой: отслеживание одного аллювия от оси к оси с использованием ggalluvial, как предполагается, возможно с использованием всех настроек lode.guidance, или это ошибка в пакете? Или "zigzag" единственный параметр lode.guidance, предназначенный для отслеживания аллювия?

Любая помощь с этим очень ценится! Конечно, использование «зигзага» работает для моего графика, но я хотел, чтобы все знали, что эта проблема существует, и посмотреть, сможет ли кто-нибудь разобраться в моем замешательстве.

1 Ответ

2 голосов
/ 06 февраля 2020

Конечно, каждый намыв должен соответствовать одному случаю, независимо от настроек параметров. Проблема здесь заключается в том, что для создания двух слоев на графике в различных настройках параметров используется аллювиальный стат (статистическое преобразование): слой потока с lode.guidance, установленным на "frontback", и текстовый слой с lode.guidance по умолчанию "zigzag". Это кратко обсуждается в недавней виньетке пакета , но в остальном это плохо документировано.

Одним из решений является обеспечение того, чтобы при каждом использовании любого показателя в графике передавались одни и те же параметры. Другой - установить глобальный параметр, который управляет настройками по умолчанию для каждой статистики. Оба взяты ниже, чтобы создать сюжет, я думаю, вы имеете в виду.

library(ggalluvial)
#> Loading required package: ggplot2
data(majors)
majors$curriculum <- as.factor(majors$curriculum)
# apply the same parameter setting to every instance of the alluvium stat
ggplot(majors,
       aes(x = semester, stratum = curriculum, alluvium = student,
           fill = curriculum, label = student)) +
  scale_fill_brewer(type = "qual", palette = "Set2") +
  geom_flow(stat = "alluvium", lode.guidance = "frontback",
            color = "darkgray") +
  geom_stratum() +
  geom_text(stat = "alluvium", lode.guidance = "frontback", size = 3)

# alternatively, set a package-specific global option
options(ggalluvial.lode.guidance = "frontback")
ggplot(majors,
       aes(x = semester, stratum = curriculum, alluvium = student,
           fill = curriculum, label = student)) +
  scale_fill_brewer(type = "qual", palette = "Set2") +
  geom_flow(stat = "alluvium", color = "darkgray") +
  geom_stratum() +
  geom_text(stat = "alluvium", size = 3)

Создано на 2020-02-05 по представлению пакета (v0.3.0)

...