How to configure y-axis using seqIplot in R?

2019-01-27 01:35发布

I am trying to configure the y-axis of a sequence index plot using the R-package TraMineR, I figured out how to set a global limit for the y-axis which is helpful if you want compare the number of certain sequences between two or more groups as it equalizes the scale. But I did not manage to set the y-axis ticks (as in xtstep). Maybe you can quickly help me out using this example code:

library(TraMineR) 
data(mvad)
mvad.alphabet <- c("employment", "FE", "HE", "joblessness", "school",
                      "training")
mvad.labels <- c("Employment", "Further Education", "Higher Education",
                    "Joblessness", "School", "Training")
mvad.scodes <- c("EM", "FE", "HE", "JL", "SC", "TR")

## Define sequence objects
mvad.seq <- seqdef(mvad[, 17:86], alphabet = mvad.alphabet,
                     states = mvad.scodes, labels = mvad.labels, weights = mvad$weight, xtstep = 6)

## Plots
seqIplot(mvad.seq, group=mvad$gcse5eq, withlegend=TRUE, border=NA, xtstep=3, sortv="from.start") ## Default plot
seqIplot(mvad.seq, group=mvad$gcse5eq, withlegend=TRUE, border=NA, xtstep=3, sortv="from.start", ylim=c(0, 400)) ## Plot with custom ylim to compare the number of sequences between groups

The default sequence index plot looks like this and makes it very difficult to compare the two groups: Default sequence index plot

标签: r traminer
1条回答
劫难
2楼-- · 2019-01-27 02:15

When a ylim is given in seqIplot, it is used for all groups. To make the plot heights proportional to the weighed number of sequences in each group, the upper ylim should be set as the value for to the most frequent group.

group <- mvad$gcse5eq
(nseq <- xtabs(mvad$weight ~ group))
(nmax <- max(nseq))
seqIplot(mvad.seq, group=group, withlegend=TRUE,
         border=NA, xtstep=3, sortv="from.start",
         ylim=c(0, nmax) )

The tick labels on the y axis are sequence indexes. You can suppress them with by giving yaxis = FALSE to seqIplot. To display your own labels you can then issue something like (see the help of the axisfunction for details)

axis(2, at = c(1, nseq[1]))

but in that case you should generate the seqIplot separately for each group with withlegend=FALSE and organize the plots yourself in a single graphic with layout or par(mfrow=...).

查看更多
登录 后发表回答