Plot TraMineR:使用标签绘制3000个不同的状态

Plot TraMineR:使用标签绘制3000个不同的状态,plot,legend,traminer,Plot,Legend,Traminer,我使用TraMineR来表示大约40000个序列和大约3000个不同的状态。首先,我将聚类分析减少到3000个序列(随机选择)。我已经准备好绘制序列了 我很难在任何情节的右侧添加图例。如果考虑到字母表的大小,这是不可能的,那么我们至少可以在序列中添加前10个最常见的序列图,这10个序列的图例子集。这就是我的意思 当我使用seqfplot绘制10个最频繁的序列时,有没有办法将图例限制在这10个最频繁的序列上,以便读者识别这些序列? 谢谢。一种解决方案是通过在seqfplot调用中设置with.le

我使用TraMineR来表示大约40000个序列和大约3000个不同的状态。首先,我将聚类分析减少到3000个序列(随机选择)。我已经准备好绘制序列了

我很难在任何情节的右侧添加图例。如果考虑到字母表的大小,这是不可能的,那么我们至少可以在序列中添加前10个最常见的序列图,这10个序列的图例子集。这就是我的意思

当我使用seqfplot绘制10个最频繁的序列时,有没有办法将图例限制在这10个最频繁的序列上,以便读者识别这些序列?
谢谢。

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

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

首先,我们创建具有长标签和权重的原始状态序列对象

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)
您可以看到,五个最频繁的序列仅包括6种状态中的5种(这些序列中不出现JL)

现在,我们从5个最频繁的序列构建一个状态序列对象:

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

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

获得正确百分比的解决方案是

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

谢谢你的帮助
sti <- which(alphabet(sf) %in% alphabet(sff))
sff <- seqdef(sf, weights = attr(sf,"weights"), 
       cpal=cpal(sf)[sti], labels=mvad.lab[sti], xtstep=6)
seqfplot(sff)
par(mfrow=c(1,2))
seqfplot(mvad.seq, idxs = 1:5, with.legend=FALSE)
seqlegend(sff)