2016-10-20 8 views
0

Я работаю с категориальными продольными данными. Мой данные имеет 3 простых переменные, такие как:R - ggplot2 параллельный категориальный график

 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

enter image description here

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

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

enter image description here

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

Интересно, если вы могли бы помочь мне:

а) помочь сделать видимую 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 в масштабе линии Thinkness, а также, вы можете настроить свой код на этот:

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.

enter image description here

+0

спасибо, очень круто – giacomo