Сюжет последовательности с ggplot2 и geom_raster - PullRequest
0 голосов
/ 01 апреля 2019

Я хочу создать график последовательности, как здесь (первая цифра, б)): http://traminer.unige.ch/preview-visualizing.shtml

Но я хочу использовать ggplot2 для этого.Я «растаял» данные для этой цели, потому что мне не нравится широкоформатный формат.Теперь я построил результирующие данные с geom_raster, и результат был следующим:

1

Я ожидал получить шесть «горизонтальных блоков» в началекак и в первой ссылке (надеюсь, вы понимаете, о чем я), но переменная job довольно перемешана.Это мой код, я думаю, что только проблемы с порядком и те, которые используют ggplot, имеют отношение к проблеме:

library(TraMineR)
library(data.table)
library(magrittr)
library(zoo)
library(stringr)
library(purrr)
library(ggplot2)

Sys.setlocale("LC_ALL","English")

data(mvad)
Data <- as.data.table(mvad)
rm(mvad)

Data %<>%
  melt(measure.vars = c("Belfast", "N.Eastern", "Southern", "S.Eastern", "Western"),
       variable.name = "school", 
       value.name = "school.boolean") %>% 
  .[school.boolean == "yes"] %>% 
  .[, -"school.boolean"]

time.vars <- 
  names(Data) %>% 
  .[str_detect(., "[:alpha:]{3}\\.[:digit:]{2}")]

boolean.cols <- 
  c("male", "catholic", "Grammar", "funemp", "gcse5eq", "fmpr", "livboth")

Data %<>% 
  melt(measure.vars = time.vars,
       variable.name = "month",
       value.name = "job") %>%
  .[, month := as.yearmon(month, "%b.%y")] %>% 
  setorder(id, month) %>% 
  .[, (boolean.cols) := map(.SD, ~ {.x == "yes"}),
    .SDcols = boolean.cols] %>% 
  .[, Sex := ifelse(male == TRUE, "Male", "Female")] %>% 
  .[, -"male"] %>% 
  setnames(names(.), names(.) %>% str_to_title) %>% 
  .[, Id := factor(Id, levels = Id[order(Job, Month)] %>% unique)] 

Data %>% 
  ggplot(aes(x = Month, y = Id, fill = Job)) + 
  geom_raster() + 
  labs(y = NULL)

Редактировать: .[, Id := factor(Id, levels = Id[order(Month, Job)] %>% unique)] тоже не работает.

1 Ответ

0 голосов
/ 03 апреля 2019

После определения time.vars необходимо установить порядок набора данных по ним.Тогда у каждого есть правильная идентификация заказа.

Data %<>% setorderv(time.vars)
ID.order <- Data[, id %>% unique]

В конце этот ряд

.[, Id := factor(Id, levels = Id[order(Job, Month)] %>% unique)] 

должен быть заменен следующим:

.[, Id := factor(Id, levels = ID.order)] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...