#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
.