【问题标题】:In R - How do you make transition charts with the Gmisc package?在 R 中 - 你如何使用 Gmisc 包制作转换图?
【发布时间】:2014-10-16 08:51:26
【问题描述】:

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

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

但是,我的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 中制作了一个看起来像这样的情节

但我的主管不喜欢它,因为我必须jitter这些线,这样它们就不会重叠,所以人们可以看到每个患者发生了什么,因此点/线没有完全对齐与 y 轴一致。

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

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

谢谢。

【问题讨论】:

  • 我不认为 transitionPlot 会像你想要的那样工作,因为你的转换矩阵中的零单元格 - 它们不会显示为框被缩放到计数
  • 当我在矩阵中输入零时,这一直是一个错误......好点!
  • 有趣的想法,添加起始/结束文本列应该相当容易,尽管您需要了解一些有关 grid 包的知识才能使其工作,我想它需要这些框有固定的尺寸。这是一个很好的建议,不知道我是否有时间实施它。

标签: r plot ggplot2 gmisc


【解决方案1】:

使用您的示例df 数据,这里有一些非常低级的绘图功能,可以重新创建您的示例图像。应该可以随心所欲地定制

首先,确保 pre 出现在 post 之前

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)")

导致

【讨论】:

  • 感谢 MrFlick - 再次得到您的出色回答!我会将其评为答案,因为它有效地满足了我的要求,但我仍然很想知道如何使用Gmisc 来做到这一点!不过,我正在尝试在脑海中分解您的代码,以便可以对其进行修改。 textrect 绘制矩形+文本,connect 绘制连接。但是你为什么非要把reshapedf 改成宽格式呢?以及如何实际控制盒子的正确连接,即零盒子不连接?
  • 我重塑为宽格式以匹配特定研究 ID 的术前和术后值。这告诉我需要连接哪些节点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2015-04-15
  • 2014-06-14
  • 2021-09-14
  • 2019-09-27
  • 1970-01-01
相关资源
最近更新 更多