跟着高分SCI学画图:Python绘制六边形箱图和核密度估计图

文摘   2024-09-15 22:50   德国  

跟着高分SCI学画图:Python绘制六边形箱图和核密度估计图

在科研数据分析中,随着数据量的增加,过度绘制(overplotting)成为一个常见问题,尤其在高分文章的图表中,经常会看到如何通过图表优化来避免信息丢失。今天我们将通过Python演示如何使用六边形箱图(Hexbin)和核密度估计图(KDE)来解决这一问题,帮助您提升科研图表的可读性与表现力。

图1. 六边形箱图和核密度估计图

过度绘制的困境

过度绘制(Overplotting)是指在可视化数据时,当大量数据点重叠在图表上导致图像拥挤不清晰,难以理解数据的实际分布或趋势的一种现象。它通常发生在散点图或其他类型的图表中,尤其是当数据集较大,数据点彼此之间距离较近时。

过度绘制的主要问题

  1. 信息丢失: 由于数据点重叠,图表上某些区域的数据点变得无法区分,导致信息丢失或无法准确传达数据密度。
  2. 可读性差: 当大量数据点集中在一起时,图表变得杂乱,难以解读数据的趋势和分布情况。
  3. 误导性: 在一些极端情况下,过度绘制会让人误以为某些区域的数据点很少或没有,从而导致错误的结论。

解决过度绘制的方法

  1. Hexbin(六边形箱图): 将数据点分布聚合到六边形网格中,每个六边形根据其中数据点的数量进行着色。它能够有效减少图表的复杂性,同时保留数据的密度信息。
  2. 透明度调整(Alpha Blending): 通过调整数据点的透明度来降低重叠部分的视觉效果,使得重叠区域的颜色更深,显示出数据点密集的地方。
  3. KDE(核密度估计)图: 使用核密度估计(Kernel Density Estimation)来平滑和估计数据的分布,能够很好地显示数据的总体趋势和密度情况。

六边形箱图详解

Hexbin图的作用

Hexbin图是处理大数据集中点分布的一种好方法。与普通的散点图不同,Hexbin图将数据聚合到网格中,每个六边形的颜色表示数据点的密度。这样不仅解决了数据点重叠导致的信息丢失,还能更加直观地展示数据分布。

Hexbin图绘制原理与代码讲解

原理
Hexbin图的核心思想是将散点数据映射到六边形单元格中,并根据单元格中的点数量着色,颜色越深,数据点越密集。它通过聚合来代替简单的点对点散布,尤其适合大数据集。
构造示例数据集
我们将代码生成了一个包含三个不同分布的数据集,并将其合并为一个DataFrame df

  • df1: 数据集A,xy的值服从均值为10,标准差为1.2的正态分布。组名为'A',数据量为20000。
  • df2: 数据集B,xy的值服从均值为14.5,标准差为1.2的正态分布。组名为'B',数据量为20000。
  • df3: 数据集C,x服从均值为9.5,标准差为1.5的正态分布,y服从均值为15.5,标准差为1.5的正态分布。组名为'C',数据量为20000。

通过pd.concat()函数将三个数据集合并成一个DataFrame df

# 导入所需的库
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import pandas as pd

# 生成数据集
# 数据集 df1: x 和 y 从均值为 10,标准差为 1.2 的正态分布中生成,分组为 'A'
df1 = pd.DataFrame(
    {'x': np.random.normal(10, 1.2, 20000), 'y': np.random.normal(10, 1.2, 20000), 'group': np.repeat('A', 20000)})

# 数据集 df2: x 和 y 从均值为 14.5,标准差为 1.2 的正态分布中生成,分组为 'B'
df2 = pd.DataFrame(
    {'x': np.random.normal(14.5, 1.2, 20000), 'y': np.random.normal(14.5, 1.2, 20000), 'group': np.repeat('B', 20000)})

# 数据集 df3: x 从均值为 9.5,标准差为 1.5 的正态分布中生成,y 从均值为 15.5,标准差为 1.5 的正态分布中生成,分组为 'C'
df3 = pd.DataFrame(
    {'x': np.random.normal(9.5, 1.5, 20000), 'y': np.random.normal(15.5, 1.5, 20000), 'group': np.repeat('C', 20000)})

# 合并三个数据集成一个 DataFrame
df = pd.concat([df1, df2, df3], ignore_index=True)

# 将合并后的数据保存到 CSV 文件中
df.to_csv('input_data.csv', index=False)

绘制 Hexbin 图(六边形箱图)

  • Hexbin图是一种处理大量散点数据的有效方法。它将数据点聚合到六边形的单元格中,并根据单元格中的点数对其进行着色。
  • 使用plt.hexbin()函数创建Hexbin图:
    • gridsize=50指定了六边形网格的大小。
    • cmap='viridis'设定了颜色映射(颜色从黄色到紫色变化,表示密度增加)。
  • 添加颜色条来表示每个六边形中的点数。
  • Hexbin图能够有效处理大量数据点的重叠问题,帮助我们清晰看到数据密度和分布。
# 导入所需的库
import matplotlib.pyplot as plt

# 绘制 Hexbin 图(六边形箱图)以处理过度绘图问题
plt.figure(figsize=(10, 6))
plt.hexbin(df['x'], df['y'], gridsize=50, cmap='viridis')  # 绘制 Hexbin 图,设置网格大小和颜色映射
plt.colorbar(label='Count in bin')  # 添加颜色条,显示每个六边形中的数据点数量
plt.xlabel('Value of X')  # 设置 x 轴标签
plt.ylabel('Value of Y')  # 设置 y 轴标签
plt.title('Hexbin Plot to Address Overplotting')  # 设置图表标题
plt.show()  # 显示图形
图2. Hexbin(六边形箱图)

核密度估计图详解

KDE图的作用

KDE图同样是解决过度绘制的利器,它通过核密度估计算法,平滑数据分布,使我们能够直观了解数据的总体趋势。相比于Hexbin图,KDE图不仅展示了数据点的密度,还能清晰地看出数据的概率分布。

KDE图绘制原理与代码讲解

原理
KDE图基于概率密度函数估计,通过核函数对数据进行平滑,使我们可以直观看到数据集中在哪些区域。对于不同组别的比较(如A、B、C组),我们可以使用不同颜色填充展示它们的分布差异。
绘制KDE(核密度估计)图

  • KDE图是基于数据的密度来估计分布的平滑图。它使用核密度估计(Kernel Density Estimation)来估算二维数据的概率密度函数。
  • 使用sns.kdeplot()函数创建KDE图:
    • data=df指定数据源。
    • x='x'y='y'指定要绘制的变量。
    • hue='group'根据不同的组('A', 'B', 'C')对数据进行颜色区分。
    • fill=Truealpha=0.6用于填充颜色,并设定透明度,使得图表更清晰。
    • palette='Set1'为不同组指定了颜色。
# 绘制 KDE 图(核密度估计图)以处理过度绘图问题
plt.figure(figsize=(10, 6))
sns.kdeplot(data=df, x='x', y='y', hue='group', fill=True, alpha=0.6, palette='Set1')  # 绘制 KDE 图,按组着色并填充颜色
plt.xlabel('Value of X')  # 设置 x 轴标签
plt.ylabel('Value of Y')  # 设置 y 轴标签
plt.title('KDE Plot to Address Overplotting')  # 设置图表标题
plt.show()  # 显示图形
图3. 核密度估计图

总结

通过这两种可视化方法,你可以有效解决过度绘制问题,无论是Hexbin图的聚合与着色,还是KDE图的平滑与填充,都会让你的数据分布一目了然,避免关键信息被大量数据点所掩盖。

如果你希望在科研图表中既保留数据的细节又解决图表的复杂性,试试这两种方法吧!Python的绘图能力可以轻松提升你的科研数据可视化水平,为你的文章增添亮点!

本文作者:李想


现在:


长按扫码关注:科研生信充电宝


10元赞赏本文,即喜欢作者~


即可直接解锁:


跟着高分SCI学画图:Python绘制六边形箱图和核密度估计图》对应资源哦~


看到这里你还不心动吗?


赶紧关注、转发、点赞、分享,领取你的专属福利吧~



好啦,以上就是今天推文的全部内容啦!


版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本公众号不拥有所有权,也不承担相关法律责任。

如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:kysxcdb@163.com 进行举报,一经查实,本公众号将立刻删除涉嫌侵权内容。



科研生信充电宝
介绍科研;介绍统计;介绍生信;
 最新文章