TraMineR:使用大约3000个不同状态的标签进行绘图

时间:2018-01-01 20:03:09

标签: plot legend traminer

我使用TraMineR代表大约40,000个序列,大约有3,000个不同的状态。首先,我将聚类分析减少到3,000个序列(随机选择)。我准备好了序列。

我无法在任何情节的右侧添加图例。如果在给定字母表大小的情况下这是不可能的,至少我们可以在序列中添加前10个最频繁的序列,绘制这10个序列的图例子集。这就是我的意思。

当我使用seqfplot绘制10个最常见的序列时,是否有一种方法可以将图例限制在这10个最常见的序列中,以便读者识别这些序列? 感谢。

1 个答案:

答案 0 :(得分:1)

一种解决方案是通过在with.legend = FALSE调用中设置seqfplot来抑制图例,然后使用基本的legend函数创建自己的图例。

或者,您可以从seqtab函数的结果重新创建状态序列对象,该函数返回最常见的序列,然后绘制此新对象。这里唯一的难点是保留原始的长标签和调色板。我将使用mvad附带的TraMineR数据进行说明。

首先,我们使用长标签和权重创建原始状态序列对象。

library(TraMineR)
data(mvad)
mvad.lab <- c("employment", "further education", "higher education",
              "joblessness", "school", "training")
mvad.shortlab <- c("EM", "FE", "HE", "JL", "SC", "TR")
mvad.seq <- seqdef(mvad[, 17:86], states = mvad.shortlab,
                   labels = mvad.lab, weights = mvad$weight, xtstep = 6)

正在运行

seqfplot(mvad.seq, idxs=1:5)

你可以看到,五个最常见的序列只包括6个状态中的5个(JL不会出现在这些序列中)。

现在我们从5个最常见的序列构建一个状态序列对象:

sf <- seqtab(mvad.seq, idxs = 1:5)
sff <- seqdef(sf, weights = attr(sf,"weights"))

要匹配长标签和颜色,我们需要确定原始字母矢量中保留状态的位置:

sti <- which(alphabet(sf) %in% alphabet(sff))

这允许我们使用想要的颜色和长标签重建sff

sff <- seqdef(sf, weights = attr(sf,"weights"), 
       cpal=cpal(sf)[sti], labels=mvad.lab[sti], xtstep=6)
seqfplot(sff)

enter image description here

当然,100%显示的百分比不是所有序列的百分比,而是sff中五个序列的百分比。

具有正确百分比的解决方案是

par(mfrow=c(1,2))
seqfplot(mvad.seq, idxs = 1:5, with.legend=FALSE)
seqlegend(sff)

enter image description here