我需要可靠且可重復地可視化一個系統,該系統就像每單位時間可以通過一定量流體的管道。真正的系統是一個有多種干預措施的治療部門,考慮到作業治療師的能力,每年可以為一定數量的人提供服務。可視化是必要的,因為人們對數字的反應很差,我們被困在試圖將需求與容量相匹配。
假設有 3 種治療途徑(評估、MBT 和 SCM - 實際上還有更多,但 3 是一個很好的例子)。每個人都有一個等待名單,可以在“管道”開口之前用適當大小的圓圈表示。作業治療師代表管道的容量 - 例如每年 24 人或每年 45 人。當前正在接受治療的患者代表管道的填充水平 - 它可以是飽和的或低于飽和的(x%)。
問題:對于這類問題,什么是好的可視化方法以及哪些 R 包可以幫助實作這一目標?
非常感謝您對忙碌的臨床醫生的建議。(雖然我有相當多的 R 經驗)
uj5u.com熱心網友回復:
ggplot如果您準備好操縱資料以使其成為正確的繪圖形狀,則可以執行所有這些操作。以下花了我大約 15 分鐘。
假設您的資料是這樣的:
data <- data.frame(service = c('Assessment', 'MBT', 'SCM'),
therapists = c(32, 45, 20),
current_patients = c(130, 212, 35),
maximum_patients = c(143, 212, 50),
queue = c(35, 52, 7))
然后你可以將它重新排列成這樣的繪圖格式:
library(tidyverse)
library(ggforce)
plot_df <- data %>%
mutate(left_edge = 10 c(0, cumsum(head(therapists, -1) 10)),
right_edge = cumsum(therapists 10),
upper_edge = 80 * current_patients / maximum_patients,
mid = (left_edge right_edge) / 2)
并使用 ggplot 繪制您想要的繪圖:
ggplot(plot_df)
geom_rect(aes(xmin = left_edge, ymin = 0,
xmax = right_edge, ymax = upper_edge), fill = 'lightblue')
geom_segment(aes(x = left_edge, y = 0, xend = left_edge, yend = 80),
size = 1, color = 'gray20')
geom_segment(aes(x = right_edge, y = 0, xend = right_edge, yend = 80),
size = 1, color = 'gray20')
geom_segment(aes(x = left_edge, y = 0, xend = right_edge, yend = 0),
size = 1, color = 'gray20')
geom_circle(aes(x0 = mid, y0 = 100, r = 2 * sqrt(queue)), fill = '#3070B1',
color = NA)
geom_text(aes(x = mid, y = 100, label = queue),
colour = 'white', size = 6, fontface = 2)
geom_text(aes(x = mid, y = 40, label = current_patients),
size = 6, fontface = 2)
geom_text(data = data.frame(x = -30, y = c(10, 40, 100),
label = c('Therapists', 'Patients\nIn treatment',
'Patients\nWaiting')),
aes(x, y, label = label), hjust = 0, size = 6, fontface = 1,
color = '#202040')
geom_segment(aes(x = mid, y = 10, xend = left_edge, yend = 10),
arrow = arrow(length = unit(0.1, 'inches')))
geom_segment(aes(x = mid, y = 10, xend = right_edge, yend = 10),
arrow = arrow(length = unit(0.1, 'inches')))
geom_label(aes(x = mid, y = 10, label = therapists), fontface = 2)
scale_x_continuous(breaks = plot_df$mid, labels = plot_df$service,
limits = c(-30, 140))
coord_equal()
theme_void()
theme(axis.text.x = element_text(size = 18, color = '#202040'),
plot.background = element_rect(fill = '#f3f9ff'),
plot.margin = margin(50, 20, 50, 20))

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468212.html
上一篇:融化頻率表以使用ggplot2
