用点包图洞察医学数据:以血压分析为例

在医学数据分析的广袤天地里,可视化手段无疑是我们快速洞察数据、挖掘关键信息的有力 "武器"。今天,就来给各位医学同仁介绍一种别具一格的可视化图表 ------ 点包图(Diverging Dotplot),顺便分享一段用 Python 实操绘制它的代码,助你轻松开启数据可视化的新旅程。

点包图为何物?

点包图,本质上是一种散点图的变体,它擅长突出数据点与某个参考值(常是均值)的偏离情况。在医学领域,很多时候我们关心某项生理指标相较于正常范围均值的高低,点包图就能将这类信息直观呈现,让人一眼看清数据的分布态势。

绘制前的准备:环境与数据

咱们使用 Python 里超热门的 pandasmatplotlib 库来绘制点包图。pandas 用于数据处理、规整,matplotlib 则负责可视化呈现。

先看看数据,以下这段代码模拟生成了一组简单却很典型的医学数据:

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt

# 模拟生成医学数据
data = {
    "systolic_bp": [175, 130, 160, 110, 150, 115, 135, 145, 115, 155],
    "diastolic_bp": [80, 85, 90, 75, 95, 83, 88, 93, 78, 98],
    "health_status": ["normal", "prehypertension", "hypertension stage 1", "normal", "hypertension stage 2",
                      "prehypertension", "hypertension stage 1", "hypertension stage 2", "normal",
                      "hypertension stage 3"]
}
df = pd.DataFrame(data)

这里的数据包含病人的收缩压(systolic_bp)、舒张压(diastolic_bp),还有对应的健康状态(health_status),麻雀虽小,五脏俱全,足够咱们开启分析之旅。

绘制点包图:步步为营

数据标准化:要绘制点包图,往往需先把关键数据标准化,让它们能围绕一个基准值(通常是均值,标准化后均值为 0)来分布展示。

python 复制代码
# 提取'systolic_bp'列作为x变量,并计算其标准化值
x = df.loc[:, ['systolic_bp']]
df['systolic_bp_z'] = (x - x.mean()) / x.std()

这段代码提取了收缩压数据,算出每一个值相对均值的标准分数,正数意味着高于均值,负数反之。

颜色赋值:依据标准化后的数据点位置,给它们分配不同颜色,这能增强可视化的对比效果。

python 复制代码
# 根据'systolic_bp_z'列的值确定颜色
df['colors'] = ['green' if x < 0 else'red' for x in df['systolic_bp_z']]

在这里,低于均值的点标为绿色,高于均值的点则是红色,一目了然区分血压高低情况。

数据排序与索引重置:排序能让点包图看起来更规整,重置索引则是为后续绘图的坐标定位打基础。

python 复制代码
df.sort_values('systolic_bp_z', inplace=True)
df.reset_index(inplace=True)

绘图实操:终于到了出图环节。

python 复制代码
# 绘制图形
plt.figure(figsize=(10, 5), dpi=200)
plt.scatter(df.systolic_bp_z, df.index, s=450, alpha=0.6, color=df.colors)

scatter 函数绘制散点,横坐标是标准化的收缩压,纵坐标用索引定位,点的大小、透明度、颜色都精心设置,确保视觉效果清晰又美观。

添加标注与美化:给每个点加上具体数值标注,再润色下图表边框、坐标轴标签、网格线等。

python 复制代码
# 在每个点上添加'systolic_bp_z'的值作为标签
for x, y, tex in zip(df.systolic_bp_z, df.index, df.systolic_bp_z):
    t = plt.text(x, y, round(tex, 1),
                 horizontalalignment='center',
                 verticalalignment='center',
                 fontdict={'color': 'white'})

# 轻化边框
plt.gca().spines["top"].set_alpha(0.3)
plt.gca().spines["bottom"].set_alpha(0.3)
plt.gca().spines["right"].set_alpha(0.3)
plt.gca().spines["left"].set_alpha(0.3)

plt.yticks(df.index, df.health_status)
plt.title('Diverging Dotplot of Systolic Blood Pressure', fontdict={'size': 20})
plt.xlabel('Systolic Blood Pressure (Standardized)')
plt.grid(linestyle='--', alpha=0.5)
plt.xlim(-2.5, 2.5)
plt.show()

医学场景应用

点包图在医学数据分析里大有用武之地。拿血压数据来说,一眼扫过去,我们就能快速锁定哪些病人收缩压偏离正常均值较多,还能结合对应的健康状态,初步判断血压异常和疾病阶段之间的关联。要是拓展到大规模临床研究,分析诸如血糖、血脂等关键指标时,点包图同样能助力医生、研究者迅速梳理出不同亚组人群的指标差异,挖掘潜在的疾病风险因素,为精准医疗、个性化干预方案的制定提供可视化的数据支撑。

掌握点包图绘制,相当于在医学数据解读的 "武器库" 里新添一件趁手的工具,不妨在日常分析里小试身手,说不定能挖出意想不到的关键洞察!

相关推荐
GIS数据转换器14 小时前
基于GIS与AI的社区‑商圈融合可视化平台
人工智能·信息可视化·无人机·智慧城市·制造
wjykp14 小时前
5.脑电信号的预处理及数据分析要点
数据挖掘·数据分析
wang_yb14 小时前
折线图的奇妙变奏:四种创意可视化方法
数据分析·databook
90的程序爱好者15 小时前
Kettle多张表数据抽取操作步骤
数据库·数据仓库·数据挖掘
AI-小柒15 小时前
从零入门大语言模型(LLM):系统学习路线与实践指南
大数据·开发语言·人工智能·学习·信息可视化·语言模型·自然语言处理
Aloudata16 小时前
破局 AI 幻觉:构建以 NoETL 语义编织为核心的 AI 就绪数据架构
人工智能·架构·数据分析·dataagent
Python毕设指南17 小时前
基于深度学习的旅游推荐系统
python·深度学习·数据分析·django·毕业设计·课程设计
2501_9436953319 小时前
高职仓储分拣转优化分析中数据分析的作用
数据挖掘·数据分析
Data-Miner19 小时前
类似Pandas AI的几个数据分析处理智能体介绍
人工智能·数据分析·pandas
QQ129584550420 小时前
SSAS - 发货主题数据第1阶
数据仓库·数据分析