Ви хочете порівняти "ефективність" та оцінити кількість пацієнтів, які повідомляють про кожне лікування. Ефективність реєструється в п'яти дискретних, упорядкованих категоріях, але (якось) також підсумовується у "Середній". (середнє) значення, що говорить про те, що воно розглядається як кількісна величина.
Відповідно, нам слід вибрати графіку, елементи якої добре пристосовані для передачі подібної інформації. Серед безлічі відмінних рішень, що пропонують себе, можна використовувати цю схему:
Представити загальну чи середню ефективність як позицію по лінійній шкалі. Такі позиції найбільш легко візуалізуються візуально та точно читаються кількісно. Зробіть масштаб спільним для всіх 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")
caffeine
чиibuprofen
до більшої ймовірності,moderate improvement
оскільки базові лінії відрізняються? Або щось інше?