Anda ingin membandingkan "efektivitas" dan mengevaluasi jumlah pasien yang melaporkan setiap perawatan. Keefektifan direkam dalam lima kategori diskrit, tertata, tetapi (entah bagaimana) juga diringkas menjadi "Rta." (rata-rata) nilai, menunjukkan itu dianggap sebagai variabel kuantitatif.
Oleh karena itu, kita harus memilih grafik yang unsur-unsurnya disesuaikan dengan baik untuk menyampaikan informasi semacam ini. Di antara banyak solusi bagus yang disarankan sendiri, ada yang menggunakan skema ini:
Tunjukkan efektivitas total atau rata-rata sebagai posisi sepanjang skala linier. Posisi seperti itu paling mudah dipahami secara visual dan akurat dibaca secara kuantitatif. Jadikan skala umum untuk semua 34 perawatan.
Mewakili jumlah pasien dengan beberapa simbol grafis yang mudah dilihat berbanding lurus dengan angka-angka itu. Persegi panjang sangat cocok: mereka dapat diposisikan untuk memenuhi persyaratan sebelumnya dan ukuran dalam arah ortogonal sehingga ketinggian dan daerah mereka menyampaikan informasi jumlah pasien.
Bedakan lima kategori efektivitas dengan warna dan / atau nilai naungan. Pertahankan pemesanan kategori-kategori ini.
Salah satu kesalahan besar yang dibuat oleh grafik dalam pertanyaan adalah bahwa nilai-nilai visual yang paling menonjol - panjang bar - menggambarkan informasi jumlah pasien daripada informasi efektivitas total. Kita dapat memperbaikinya dengan mudah dengan memasukkan kembali setiap bilah tentang nilai tengah alami.
Tanpa membuat perubahan lain (seperti memperbaiki skema warna, yang sangat buruk untuk orang buta warna), inilah desain ulang.
Saya menambahkan garis putus-putus horisontal untuk membantu mata menghubungkan label dengan plot, dan menghapus garis vertikal tipis untuk menunjukkan lokasi pusat umum.
Pola dan jumlah respons jauh lebih jelas. Secara khusus, kami pada dasarnya mendapatkan dua grafik untuk harga satu: di sisi kiri kita dapat membaca dari ukuran efek samping sementara di sisi kanan kita dapat melihat seberapa kuat efek positifnya . Mampu menyeimbangkan risiko, di satu sisi, melawan manfaat, di sisi lain, penting dalam aplikasi ini.
Salah satu efek kebetulan dari desain ulang ini adalah bahwa nama-nama perawatan dengan banyak respons secara vertikal terpisah dari yang lain, sehingga mudah untuk memindai dan melihat perawatan mana yang paling populer.
Aspek lain yang menarik adalah bahwa grafik ini mempertanyakan algoritma yang digunakan untuk memesan perawatan dengan "Efektivitas rata-rata": mengapa, misalnya, "Pelacakan sakit kepala" ditempatkan sangat rendah ketika, di antara semua perawatan yang paling populer, itu adalah satu-satunya tidak memiliki efek buruk?
Kode cepat dan kotor R
yang menghasilkan plot ini ditambahkan.
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
atauibuprofen
mengarah pada kemungkinan yang lebih tinggimoderate improvement
karena garis dasar berbeda? Atau sesuatu yang lain?