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

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

医学场景应用

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

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

相关推荐
Start_Present3 小时前
Pytorch 第十二回:循环神经网络——LSTM模型
pytorch·rnn·神经网络·数据分析·lstm
DREAM.ZL3 小时前
基于python的电影数据分析及可视化系统
开发语言·python·数据分析
代码骑士5 小时前
聚类(Clustering)基础知识2
机器学习·数据挖掘·聚类
大美B端工场-B端系统美颜师6 小时前
静态图表 VS 动态可视化,哪种更适合数据故事讲述?
信息可视化·数据挖掘·数据分析
eBest数字化转型方案9 小时前
eBest AI智能报表:用自然语言对话解锁企业数据生产力
信息可视化
青云交10 小时前
Java 大视界 -- Java 大数据在智能电网电力市场交易数据分析与策略制定中的关键作用(162)
java·大数据·数据分析·交易策略·智能电网·java 大数据·电力市场交易
斯汤雷11 小时前
Matlab绘图案例,设置图片大小,坐标轴比例为黄金比
数据库·人工智能·算法·matlab·信息可视化
葡萄成熟时_12 小时前
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【代码篇】A题解题全流程(持续更新)
人工智能·数据挖掘
mosquito_lover113 小时前
Python数据分析与可视化实战
python·数据挖掘·数据分析
QQ__176461982415 小时前
Labview信号采集与分析系统(可仿真)
数据分析·数据采集·labview