【发布时间】:2014-11-12 10:36:43
【问题描述】:
我正在尝试在 R 中创建一个水平“堆叠”条形图。我正在绞尽脑汁,因为我读过的大多数示例并没有完全满足我的需求。以下是一些示例数据:
pat3 <- pat2[c("id", "visitday","dose")] #given data.
pat3
id visitday dose
7 11558 1.87 3850
8 11558 41.14 3850
9 11558 95.37 3800
10 11558 132.77 3800
28 11559 1.87 3850
29 11559 56.10 3800
30 11559 95.37 3800
31 11559 132.77 3800
32 11559 173.91 3800
46 11560 1.87 3850
47 11560 69.19 3794
48 11560 108.46 3794
49 11560 147.73 3794
50 11560 187.00 3794
51 11560 226.27 3794
- 在 y 轴上,我需要按升序排列的唯一“id”。
- x 轴将是一个连续的刻度,其中水平条将按升序“堆叠”到每个“访问日”。
- “剂量”是从时间 0 到下一个“访问日”消耗的液体量度。剂量将水平“堆叠”,其中给定的剂量将是每个 ID 条上的特定颜色,直到相应的“访问日”。
例如,对于 ID=115588,从访问日 0 到 1.87,他们消耗了 3850 剂,因此他们的条形图在条形图上从 0 到 1.87 为蓝色。到 41.14 访问日,他们仍然消耗了另一剂 3850,因此从 1.88 到 41.14,他们的条形图仍然是蓝色的。但是从 41.15 到 95.37,他们将服用 3800 的新剂量,他们的酒吧现在将变成不同的颜色,比如红色。访问日 95.38 - 132.77 也是如此,因为仍然是相同的 3800 剂量。
因此对于这个 ID=115588,我们应该看到一个蓝色的条形图,剂量 = 3850,从访问日 0 到 41.14,“堆叠”在上面,将是红色,剂量=3800,从访问日 41.15 到 132.77 .
这就是我现在的位置:
pat3 <- pat2[c("id", "visitday","dose")] #get data.
diff2 <- function(x) diff(c(0, x))
pat3$diffday <- c(unlist(t(aggregate(visitday~id, pat3, diff2)[, -1])))
pat3 #check diffday
w <- reshape(pat3,
timevar = "id",
idvar = c("dose","visitday"),
direction = "wide")
drops <- c("visitday")
w2 <- w[,!(names(w) %in% drops)]
w2[is.na(w2)] <- 0
w3 <- data.matrix(w2)
barplot(w3, horiz=T)
如您所见,我一直坚持如何对每种剂量的颜色进行分类,同样,只要所有服用这些剂量的患者一致,剂量就可以是任何颜色。因此,如果有人服用剂量=3850,则其条形部分应为蓝色,如果有人服用剂量=3800,则其条形部分应为红色,如果有人服用剂量=3794,则条形部分应为绿色.
我还需要从图表中删除“剂量”栏,因为我保留它只是为了帮助对每个剂量组的颜色进行分类,但甚至没有达到那么远...
感谢任何帮助。谢谢!
【问题讨论】: