如何使用序列频率将第二个y轴添加到seqfplot?

时间:2014-05-28 19:42:35

标签: r plot traminer

我正在与TraMineR合作,对教育数据进行序列分析。我可以使用类似于以下代码的方法得到R来生成数据中10个最常见序列的图:

library(TraMineR)

##Loading the data
data(actcal)

##Creating the labels and defining the sequence object
actcal.lab <- c("> 37 hours", "19-36 hours", "1-18 hours", "no work")
actcal.seq <- seqdef(actcal, 13:24, labels=actcal.lab)

## 10 most frequent sequences in the data
actcal.freq <- seqtab(actcal.seq)
actcal.freq

## Plotting the object
seqfplot(actcal.seq, pbarw=FALSE, yaxis="pct", tlim=10:1, cex.legend=.75, withlegend="right")

但是,我还希望在图的右侧显示每个序列的频率(在对象actcal.freq中)。例如,上面代码创建的图中的第一个序列代表37.9%的数据(如当前图所示)。根据{{​​1}},这是757个科目。我希望数字757出现在右侧y轴上(对于其他序列,依此类推)。

这可能吗?我玩过seqtab,但从未能让它重现左侧y轴的间距。

1 个答案:

答案 0 :(得分:4)

行。这有点乱,但如果默认包含图例,则该功能会重置par设置,因此您需要将其关闭。然后你可以更容易地设置轴,然后我们可以返回传说。这应该适用于上面的测试数据。

#add padding to the right for axis and legend
par("mar"=c(5,4,4,8)+.1)

#plot w/o axis
seqfplot(actcal.seq, pbarw=FALSE, yaxis="pct", tlim=10:1, withlegend=F)

#plot right axis with freqs
axis(4, at = seq(.7, by=1.2, length.out=length(attr(actcal.freq,"freq")$Freq)), 
    labels = rev(attr(actcal.freq,"freq")$Freq), 
    mgp = c(1.5, 0.5, 0), las = 1, tick = FALSE)

#now put the legend on        
legend("right", legend=attr(actcal.seq, "labels"), 
    fill=attr(actcal.seq, "cpal"), 
    inset=-.3, bty="o", xpd=NA, cex=.75)

您可能需要使用边距,尤其是inset=的{​​{1}}参数来正确放置它。我希望你的真实数据与此不太相似,因为你真的必须通过这个函数去挖掘它是如何进行格式化以使事情匹配的。

TraMineR plot with right y-axis