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

在医学数据分析的广袤天地里,可视化手段无疑是我们快速洞察数据、挖掘关键信息的有力 "武器"。今天,就来给各位医学同仁介绍一种别具一格的可视化图表 ------ 点包图(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()

医学场景应用

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

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

相关推荐
struggle20253 小时前
一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI
人工智能·深度学习·目标检测·语言模型·自然语言处理·数据挖掘·集成学习
AIGC大时代5 小时前
对比DeepSeek、ChatGPT和Kimi的学术写作关键词提取能力
论文阅读·人工智能·chatgpt·数据分析·prompt
东方佑10 小时前
OpenAI承认开源策略错误,考虑调整策略并推出o3-mini模型
开发语言·数据分析
kaiyuanheshang12 小时前
数据挖掘常用算法
人工智能·算法·数据挖掘
程序猿阿伟13 小时前
《数据可视化新高度:Graphy的AI协作变革》
人工智能·信息可视化·数据分析
捕鲸叉15 小时前
第05章 17 Contour 过滤器介绍与例子
信息可视化·vtk
遗落凡尘的萤火-生信小白1 天前
单细胞-第四节 多样本数据分析,下游画图
windows·数据挖掘·数据分析
纠结哥_Shrek1 天前
基于最近邻数据进行分类
人工智能·分类·数据挖掘
Melancholy 啊1 天前
细说机器学习算法之ROC曲线用于模型评估
人工智能·python·算法·机器学习·数据挖掘
一名技术极客1 天前
Python 数据分析 - Matplotlib 绘图
python·数据分析·matplotlib