我试图找出可视化下图的最佳方法,并强调与尝试治疗的患者人数相比的治疗效果。这是实际页面的链接: http: //curetogether.com/cluster-headaches/treatments/
什么是强调有效性的最佳方式,同时仍然可以轻松比较治疗并查看有多少患者对每种治疗进行评分?我的想法是以百分比的形式显示有效性,但我不确定如何使它们易于比较并显示尝试每种方法的患者数量。
谢谢!
我试图找出可视化下图的最佳方法,并强调与尝试治疗的患者人数相比的治疗效果。这是实际页面的链接: http: //curetogether.com/cluster-headaches/treatments/
什么是强调有效性的最佳方式,同时仍然可以轻松比较治疗并查看有多少患者对每种治疗进行评分?我的想法是以百分比的形式显示有效性,但我不确定如何使它们易于比较并显示尝试每种方法的患者数量。
谢谢!
您希望比较“有效性”并评估报告每种治疗的患者数量。有效性记录在五个离散的、有序的类别中,但(不知何故)也被总结为“平均”。(平均值)值,表明它被认为是一个定量变量。
因此,我们应该选择其元素非常适合传达此类信息的图形。在众多优秀的解决方案中,有一个使用这种模式:
将总或平均有效性表示为沿线性比例的位置。这样的位置最容易在视觉上掌握并准确地定量阅读。使所有 34 种治疗方法通用的量表。
用一些容易看出与这些数字成正比的图形符号来表示患者的数量。矩形非常适合:它们可以定位以满足上述要求,并在正交方向上调整大小,以便它们的高度和面积都传达患者编号信息。
通过颜色和/或阴影值区分五个有效性类别。保持这些类别的顺序。
问题中的图形所犯的一个巨大错误是,最突出的视觉值——条的长度——描述了患者数量信息,而不是总的有效性信息。我们可以通过围绕自然中间值重新定位每个条形来轻松解决此问题。
不做任何其他更改(例如改进配色方案,这对任何色盲的人来说都特别差),这里是重新设计。
我添加了水平虚线以帮助眼睛将标签与绘图连接起来,并删除了一条细垂直线以显示共同的中心位置。
响应的模式和数量更加明显。特别是,我们基本上以一张的价格获得了两张图形:在左侧,我们可以读出不利影响的衡量标准,而在右侧,我们可以看到积极影响的强度。一方面,能够平衡风险与收益,另一方面,在此应用程序中很重要。
这种重新设计的一个意外效果是,具有许多反应的治疗名称与其他治疗方法的名称垂直分开,便于向下扫描并查看哪些治疗方法最受欢迎。
另一个有趣的方面是,该图对用于按“平均有效性”排序治疗的算法提出了质疑:例如,为什么“头痛跟踪”在所有最受欢迎的治疗中,它是唯一的没有不良影响?
R
附加了生成此图的快速而肮脏的代码。
x <- c(0,0,3,5,5,
0,0,0,0,2,
0,0,3,2,4,
0,1,7,9,7,
0,0,3,2,3,
0,0,0,0,1,
0,1,1,1,2,
0,0,2,2,1,
0,0,1,0,1,
0,0,3,2,1,
0,0,2,0,1,
1,0,5,5,2,
1,3,15,15,4,
1,2,5,7,3,
0,0,4,4,0,
0,0,2,2,0,
0,0,3,0,1,
0,0,2,2,0,
0,4,18,19,2,
0,0,2,1,0,
3,1,27,25,3,
1,0,2,2,1,
0,0,4,2,0,
0,1,6,5,0,
0,0,3,1,0,
3,0,3,7,2,
0,1,0,1,0,
0,0,21,4,2,
0,0,6,1,0,
1,0,2,0,1,
2,4,15,8,1,
1,1,3,1,0,
0,0,1,0,0,
0,0,1,0,0)
levels <- c("Made it much worse", "Made it slightly worse", "No effect or uncertain",
"Moderate improvement", "Major improvement")
treatments <- c("Oxygen", "Gluten-free diet", "Zomig", "Sumatriptan", "Rizatriptan (Maxalt)",
"Dilaudid suppository", "Dilaudid-Morphine", "Verapamil",
"Magic mushrooms", "Magnesium", "Psilocybine", "Excedrin Migraine",
"Ice packs on neck and head", "Passage of time", "Red Bull", "Lidocaine",
"Vitamin B-2 (Roboflavin)", "Caffergot", "Caffeine", "Tobasco in nose / on tongue")
treatments <- c(treatments,
"Ibuprofen", "Topamax", "Excedrin Tension Headache", "Acetaminophen (Tylenol)",
"Extra Strength Excedrin", "Hot water bottle", "Eletriptan",
"Headache tracking", "Women to Women vitamins", "Effexor", "Aspirin",
"Propanolol", "L-Arginine", "Fioricet")
x <- t(matrix(x, 5, dimnames=list(levels, treatments)))
#
# Precomputation for plotting.
#
n <- dim(x)[1]
m <- dim(x)[2]
d <- as.data.frame(x)
d$Total <- rowSums(d)
d$Effectiveness <- (x %*% c(-2,-1,0,1,2)) / d$Total
d$Root <- (d$Total)
#
# Set up the plot area.
#
colors <- c("#704030", "#d07030", "#d0d0d0", "#60c060", "#387038")
x.left <- 0; x.right <- 6; dx <- x.right - x.left; x.0 <- x.left-4
y.bottom <- 0; y.top <- 10; dy <- y.top - y.bottom
gap <- 0.4
par(mfrow=c(1,1))
plot(c(x.left-1, x.right), c(y.bottom, y.top), type="n",
bty="n", xaxt="n", yaxt="n", xlab="", ylab="", asp=(y.top-y.bottom)/(dx+1))
#
# Make the plots.
#
u <- t(apply(x, 1, function(z) c(0, cumsum(z)) / sum(z)))
y <- y.top - dy * c(0, cumsum(d$Root/sum(d$Root) + gap/n)) / (1+gap)
invisible(sapply(1:n, function(i) {
lines(x=c(x.0+1/4, x.right), y=rep(dy*gap/(2*n)+(y[i]+y[i+1])/2, 2),
lty=3, col="#e0e0e0")
sapply(1:m, function(j) {
mid <- (x.left - (u[i,3] + u[i,4])/2)*dx
rect(mid + u[i,j]*dx, y[i+1] + (gap/n)*(y.top-y.bottom),
mid + u[i,j+1]*dx, y[i],
col=colors[j], border=NA)
})}))
abline(v = x.left, col="White")
labels <- mapply(function(s,n) paste0(s, " (", n, ")"), rownames(x), d$Total)
text(x.0, (y[-(n+1)]+y[-1])/2, labels=labels, adj=c(1, 0), cex=0.8,
col="#505050")
您当然可以将每一行转换为百分比,并将所有条形图绘制为相同的长度,条形图的一部分为绿色,然后提供一个良好的有效性视觉指标。您可以将数字保留在旁边的括号中,以表明结果所基于的样本量。
如果您想保留样本数量和有效性的视觉指标,您可以按原样考虑图表,但基于灰色部分的中心将条形居中。然后,条形的整体大小将直观地指示样本大小,并且位于中心线右侧(或左侧)的条形比例将指示有效性(或其他方面)。结合起来,您可以从最右侧的那些条中获得流行和额定有效治疗的视觉指示。您可以使用您链接的页面上可用的三种方式中的任何一种进行排序。