R — ggplot2 параллельный категориальный график

#r #ggplot2

#r #ggplot2

Вопрос:

Я работаю с категориальными продольными данными. Мои данные содержат 3 простые переменные, такие как :

        id variable value
1       1        1     c
2       1        2     b
3       1        3     c
4       1        4     c
5       1        5     c
...
  

Где variable — это в основном время, и value — это 3 возможные категории, которые id можно использовать.

Я заинтересован в создании «параллельного» продольного графика, подобного этому с ggplot2

введите описание изображения здесь

Я немного пытаюсь разобраться в этом. То, что я придумал сейчас, это :

 dt0 %>% ggplot(aes(variable, value, group = id, colour = id))  
  geom_line(colour="grey70")  
  geom_point(aes(colour=value, size = nn), size=4)   
  scale_colour_brewer(palette="Set1")   theme_minimal()
  

введите описание изображения здесь

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

Я подумал, не могли бы вы помочь мне для :

a) помогите сделать видимыми id линии или сделайте их «толще» в соответствии с количеством id переходов из одного состояния в другое

б) Я также хотел бы re-size расставить точки в соответствии с количеством id в этом состоянии. Я пытался сделать это с geom_point(aes(colour=value, size = nn), size=4) , но, похоже, это не работает.

Спасибо.

 # data # 
library(dplyr) 
library(ggplot2) 

set.seed(10)

# generate random sequences # 
dt = as.data.frame( cbind(id = 1:1000, replicate(5, sample( c('a', 'b', 'c'), prob = c(0.1,0.2,0.7), 1000, replace = T)) ) ) 

# transform to PP file # 
dt = dt %>% melt(id.vars = c('id'))

# create a vector 1-0 if the activity was performed # 
dt0 = dt %>% group_by(id) %>% mutate(variable = 1:n()) %>% arrange(id)

# create the number of people in that state # 
dt0 = dt0 %>% count(id, variable, value)
dt0 = dt0 %>% group_by(variable, value, n) %>% mutate(nn = n()) 

# to produce the first graph # 
library(vcrpart) 
otsplot(dt0$variable, factor(dt0$value), dt0$id)
  

Ответ №1:

вы были так близки к geom_point(aes(colour=value, size = nn), size=4) , проблема заключалась в том, что при переопределении size после определения в aes() ggplot вы переписали ссылку на переменную константой 4. Предполагая, что вы также хотите использовать nn для масштабирования линейной продуманности, вы могли бы настроить свой код на это:

 dt0 %>% ggplot(aes(variable, value, group = id, colour = id))  
    geom_line(colour="grey70", aes(size = nn))  
    geom_point(aes(colour=value, size = nn))   
    scale_colour_brewer(palette="Set1")   theme_minimal()
  

Если бы вы хотели использовать значение задержки для толщины линии, я бы предложил добавить это в качестве нового столбца в dt0 .

введите описание изображения здесь