桑基图(Sankey Diagram)能够有效地展示复杂的流动关系,特别适合用于医学数据分析中的多种转归和治疗路径的可视化。接下来,我们将构建一个稍微复杂的示例,展示不同疾病患者在治疗过程中的流动,以及他们的治疗效果。
我们假设有以下患者数据,表示不同疾病的患者在治疗过程中的转归情况。我们将分析患者从初始诊断到最终结果的流动路径,包括不同的治疗方案及其结果。
我们将定义以下节点和流动关系:
import plotly.graph_objects as go
# 定义节点
labels = [
"Hypertension", "Diabetes", "COPD",
"Medication", "Lifestyle Changes", "Interventional Therapy",
"Improved", "Not Improved", "Hospitalized", "Discharged"
]
# 定义源节点和目标节点
source = [
0, 0, 0, # 高血压的流动
1, 1, # 糖尿病的流动
2, 2, # COPD的流动
3, 3, 3, # 药物治疗的结果
4, 4, # 生活方式改变的结果
5, 5 # 介入治疗的结果
]
target = [
3, 4, 5, # 高血压的治疗方案
3, 4, # 糖尿病的治疗方案
3, 4, # COPD的治疗方案
6, 7, 8, # 药物治疗的结果
6, 7, # 生活方式改变的结果
6, 7 # 介入治疗的结果
]
# 定义流量值
values = [
30, 10, 5, # 高血压患者流向治疗方案
20, 15, # 糖尿病患者流向治疗方案
10, 5, # COPD患者流向治疗方案
20, 15, 5, # 药物治疗的结果
10, 5, # 生活方式改变的结果
15, 5 # 介入治疗的结果
]
# 创建桑基图
fig = go.Figure(data=[go.Sankey(
node=dict(
pad=15, # 节点之间的间距
thickness=20, # 节点的厚度
line=dict(color="black", width=0.5), # 节点边框
label=labels, # 节点标签
),
link=dict(
source=source, # 源节点
target=target, # 目标节点
value=values, # 流动的数量
)
)])
# 添加标题和布局
fig.update_layout(title_text="Patient Disease Outcomes and Treatment Paths", font_size=10)
fig.show()
这种复杂的桑基图能够帮助医疗决策者和研究人员深入分析患者在不同疾病和治疗方案之间的流动情况。通过可视化患者的治疗路径和最终结果,医务人员可以识别出哪些治疗方案更有效,哪些患者更可能得到改善,进而优化诊疗流程和资源配置。
此外,这种分析也有助于公共卫生监测,识别流行病的治疗趋势和潜在健康风险。桑基图让复杂的数据变得直观明了,增强了数据的可解释性和决策支持能力。
通过本示例,我们展示了桑基图在医学数据分析中的复杂应用。随着数据可视化技术的发展,桑基图将为医学研究和临床实践提供更强大的支持,帮助我们更好地理解患者的治疗过程和健康结果。