Reputation: 143
Hi I would have a question. I am trying to draw 3 survival curve on the same plot. For each plot I would like to add the confident interval.
For this I have a data frame
dput(df)
structure(list(lowerA = c(4.1, 4.6, 5.5, 4.7, 5), Group1 = c(4.8,
5.4, 6.4, 5.5, 5.7), upperA = c(5.7, 6.3, 7.3, 6.3, 6.6), lowerB = c(6.2,
7.1, 8.7, 7.4, 8.2), Group2 = c(7.3, 8.3, 10, 8.6, 9.5), upperB = c(8.6,
9.6, 11.4, 9.9, 10.8), lowerC = c(18.3, 19.5, 24.3, 22.9, 25.5
), Group3 = c(21.4, 22.5, 27.6, 26.3, 29), upperC = c(24.7, 25.8,
31, 29.8, 32.7)), .Names = c("lowerA", "Group1", "upperA", "lowerB",
"Group2", "upperB", "lowerC", "Group3", "upperC"), row.names = c("year1",
"year2", "year3", "year4", "year5"), class = c("tbl_df", "tbl",
"data.frame"))
I tried this. It works but it's not beautiful.
ya <- rownames(df)
xa <- Group1
z1a <- lowerA
z2a <- upperA
xb <- Group2
z1b <- lowerB
z2b <- upperB
xc <- Group3
z1c <- lowerC
z2c <- upperC
#
plot(ya, xa, ylim = c(0,40))
lines(ya, xa, c)
# now the confidence bands
lines(ya, z1a, lty = "dotted")
lines(ya, z2a, lty = "dotted")
lines(yb, xb, col="green")
# now the confidence bands
lines(yb, z1b, lty = "dotted",col="green")
lines(yb, z2b, lty = "dotted", col="green")
lines(yc, xc, col="red")
# now the confidence bands
lines(yc, z1c, lty = "dotted", col="red")
lines(yc, z2c, lty = "dotted", col="red")
Any help? Suggestion?
Best, Peter
Upvotes: 0
Views: 166
Reputation: 1463
You could do something like this:
colnames(df) <- gsub("A","1",colnames(df))
colnames(df) <- gsub("B","2",colnames(df))
colnames(df) <- gsub("C","3",colnames(df))
colors <- c("blue","green","red")
library(scales)
plot(df$Group1, type = "n",ylim = c(0,40))
for(i in 1:3){
lines(df[,paste0("Group",i)], col = colors[i])
polygon(x = c(1:nrow(df),nrow(df):1),
y = c(df[,paste0("lower",i)],rev(df[,paste0("upper",i)])),
col = alpha(colors[i], 0.1),
border = NA)
arrows(x0 = c(1:nrow(df)),
x1 = c(1:nrow(df)),
y0 = df[,paste0("lower",i)],
y1 = df[,paste0("upper",i)],
col = colors[i],
angle = 90,
length = 0.05,
code = 3)
}
legend("topleft", legend = c("A","B","C"),
col = c("blue","green","red"),
lty = 1,
bty = "n")
Edit: Note that the colors of the polygons are semitransparent, overlaps of confidence intervals remain visible. I changed a value in your example to illustrate this.
Edit 2: I added a legend and error bars
Upvotes: 1