在R中 - 如何使用Gmisc包制作转换图表?

时间:2014-10-15 23:27:19

标签: r plot ggplot2 gmisc

我一直试图制作一个看起来像这样(但更好)的图表

Rudimentary Flow Chart

基于我在this discussion中使用transitionPlot()包中的Gmisc函数找到的内容。

但是,我无法获得transition_matrix权利,而且我也似乎无法在不同的第三列中绘制不同的州类。

我的数据基于手术后患者的症状改善。方框中的数字是每个州的患者数量"术前与术后。请注意(LVAD)不是必需的。

此图的数据称为df,如下所示

dput(df)
structure(list(StudyID = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 
7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("P1", "P2", "P3", 
"P4", "P5", "P6", "P7"), class = "factor"), MeasureTime = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Postoperative", 
"Preoperative"), class = "factor"), NYHA = c(3L, 3L, 3L, 3L, 
3L, 2L, 3L, 1L, 3L, 1L, 3L, 3L, 1L, 1L)), .Names = c("StudyID", 
"MeasureTime", "NYHA"), row.names = c(NA, -14L), class = "data.frame")

我在ggplot2制作了一个看起来像这样的情节

ggplot2 image

但是我的主管不喜欢它,因为我必须jitter这些线条以便它们不重叠,因此可以看到每个患者发生了什么,从而得分/线条与y轴完全对齐。

所以我想知道是否有人有任何想法,我是如何使用Gmisc包来做到这一点的,这使我看起来像transitionPlot

非常感谢您的帮助和时间。

感谢。

1 个答案:

答案 0 :(得分:2)

使用您的样本df数据,这里有一些非常低级别的绘图功能,可以重新创建您的样本图像。无论你喜欢

,都应该直截了当地定制

首先,确保pre在发布之前

df$MeasureTime<-factor(df$MeasureTime, levels=c("Preoperative","Postoperative"))

然后定义一些情节辅助函数

textrect<-function(x,y,text,width=.2) {
    rect(x-width, y-width, x+width, y+width)
    text(x,y,text)
}
connect<-function(x1,y1,x2,y2, width=.2) {
    segments(x1+width,y1,x2-width,y2)   
}

现在画出情节

plot.new()
par(mar=c(0,0,0,0))
plot.window(c(0,4), c(0,4))

with(unique(reshape(df, idvar="StudyID", timevar="MeasureTime", v.names="NYHA", direction="wide")[,-1]), 
    connect(2,NYHA.Preoperative,3,NYHA.Postoperative)
)
with(as.data.frame(with(df, table(NYHA, MeasureTime))), 
    textrect(as.numeric(MeasureTime)+1,as.numeric(as.character(NYHA)), Freq)
)

text(1, 1:3, c("I","II","III"))
text(1:3, 3.75, c("NYHA","Pre-Op","Post-Op"))
text(3.75, 2, "(LVAD)")

导致

enter image description here