首页 > 知识百科 > 正文

Python 数据可视化之密度散点图 Density Scatter Plot 原创

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


密度散点图(密度散点图),也称为密度点图或核密度估计散点图,是一种数据可视化技术,主要用于在二维平面上的分布情况下显示大量数据点。与传统散点图相比,它使用或颜色阴影来表示数据点的密度,从而更加清晰地显示数据的分布情况。密度散点图能够更好地揭示数据的集中趋势和分布模式,尤其是在数据量非常大的时候,避免了散点如图点重叠导致的可视化混乱问题。

密度散点图涉及的基础概念:

散点图(散点图):基础的二维数据表示形式,用于显示两个变量之间的。每个关系数据点的位置由这两个变量的值决定。当数据量庞大时,很多点会重叠在一起,使得无法清晰看到数据的分布。

核密度估计(Kernel Density Estimation,KDE):一种用于估计随机样本概率密度函数的非参数方法。通过平滑处理来完成单独设置值之间的空白,从而生成一个连续的概率密度函数。KDE通常涉及到选择一个核函数(如高斯核)和带宽(控制平滑程度的参数)。

颜色编码:在密度散点来说,不同的密度区域通常会使用不同颜色或深浅来表示,颜色深浅代表了该区域内数据点的密集程度。

可视化原理:

数据映射:首先将每个数据点映射到二维平面这与普通散点图相同,此步骤确定了图上每个点的位置。

密度估计:对所有数据点应用核密度估计算法该步骤是通过在每个数据点周围放置一个“核”,然后对整个数据集覆盖区域内的所有核进行求和来完成的。结果是得到整个二维空间上每个位置的密度估计值。

颜色映射:根据得到的密度估计值分配不同的区域颜色或深浅。高密度区域将被赋予亮度较鲜艳的颜色,而低密度区域则使用较浅或较淡的颜色。

形成渲染显示:最后将标记颜色编码的二维平面表示出来,的密度散点图。可选项:在相邻的密度散点图的右方或下方显示颜色条颜色条。

为什么要用密度散点图?

探索数据分配< /strong>:通过颜色编码表示不同的密度级别,密度散点图能够揭示数据中可能隐含的各种模式、噪声或趋势。这对于探索性数据分析尤其有用,因为它可以帮助研究人员发现预见到的关系或行为模式。我们可以看到哪些区域有更密集的数据点,哪些区域稀疏稀疏。在处理包含上万个数据点的大型数据集时,传统散点图可能会导致严重的的过度稀疏(overplotting),即不同数据点在图表上的位置重叠,使得无法清晰地看到数据分布。密度散点图通过表示区域内数据点的相对密度来解决这个问题,从而提供了一种更清晰、更有效地理解数据分布的波形方式。优化表现:密度散点图通过采用更新颜色或色阶映射等方法,有助于显示数据,对比传统分布点图的混乱和模糊。这样可以更容易区分高密度和低密度区域,使整体搭建更美观、容易理解。高灵活性的密度散点图支持多种定制选项,比如调整颜色映射、透明度、标记大小等,以适应不同类型和规模的数据集。此外,还可以结合其他类型的可视化技术(比如类似于异常值检测:密度散点图可以帮助我们识别异常值。如果某个区域的密度远离其他区域,那么可能存在异常值。 密度散点图:密度散点图可以帮助我们发现数据的聚集区域。如果某个区域有较高的密度,那么这可能是一个数据密度的中心。模型预测结果分析:密度散点图非常适合可视化起始值和初始值的情况,可以观察到模型预测的潜在偏移与合理性。促进决策制定:在商业智能、金融分析、生物统计等领域,了解和分析复杂数据集中的模式对于指导决策关键。密度散点图提供了一种观察方法来识别关键变量之间的关系和动态变化,从而提供帮助决策者基于深入分析做出了更加明智的选择。

总结来说,使用密度散点图在处理大规模和 / {/} /< /span>或复杂数据价值集时提供了一种间歇的工具。它不仅能够有效解决极度严重的问题,还能隐藏揭示在庞大数据背后的结构和模式,同时提供优雅且功能强大的视觉展示方式。无论是在科研、工业还是商业领域,掌握并应用这种技术都将极大增强对数据的理解和利用能力。

讲解一个带讲解椭圆形的密度散点图的绘图示例

导入需要的依赖库:

导入 numpy as np来自 numpy 导入 polyfit poly1d导入 matplotlib as mpl 来自 matplotlib 导入 cm来自 matplotlib 导入 股票代码来自 matplotlib 导入 颜色导入 matplotlib.pyplot as plt导入 matplotlib <跨度类=“token punctuation">。font_manager as fm来自 scipystats import gaussian_kde

异体带轮廓的密度散点图的Python代码如下

# 固定numpy的随机种子np .随机种子(2024< span class="6ea0-826b-c6a4-8b8a token punctuation">)# 构造二维数据 x 和 yx = np .随机.正常(loc=0.0, 比例=<跨度class="2832-9269-88e2-a258 token number">1.0, 大小= 1000)y = x + np .随机.正常(loc=0.1 比例=1.0, 大小=1000)#清晰密度x_and_y  = np.vstack([x, y])kde = gaussian_kde(x_and_y)z = kde(x_and_y)idx = z.argsort()x, y, z = x[idx], y[ idx], z[idx]is_cbar = True# 创建图形和坐标轴fig, ax = plt子图(figsize=(< /span>7, 4), dpi=150 span>)# cmap: bwr、Spectral_r、viridis_r、spring、gist_rainbow_r、RdBu_r# 可设置的颜色图 - https://matplotlib.org/tutorials/colors/colormaps.htmlmy_cmap = "bwr"#密度密度散点图ax .分散(x, y, c=z, cmap=my_cmap)#用7次税收方式,调用poly1d方法获得税收方式倍数。y_fit =< /span> polyfit(x, y, 7)y_fit_1d = np.poly1d(y_fit)y_hat = np.polyval(y_fit, x)# 计算相关系数和 R^2打印('相关系数:')打印(np.corrcoef (y_hat, y))相关性= np.corrcoef(y_hat, y)[0, 1]R_square = 相关性 ** 2< /span>打印("R^2:" , R_square)xtick = nplinspace(分钟(x), 最大(x), 1000)# 精美的剪影式plt.< /span>plot(xtick, y_fit_1d(xtick< span class="d5bd-6ea0-826b-c6a4 token punctuation">), 颜色="#FF0066", lw=2.2)#坐标轴偏差的数值使用拉丁现代数学字体标签 = ax.get_xticklabels() < span class="88e2-a258-d5bd-6ea0 token operator">+ ax.get_yticklabels()[标签set_fontproperties(font_latex2) 用于标签位于标签][标签set_color('黑色') < span class="88e2-a258-d5bd-6ea0 token keywords">对于标签 标签中]#设置坐标轴平衡plt.tick_params(axis='x',方向='out', labelsize=13长度=< /span>4.6, 宽度=1.15)plttick_params( ='y',方向='out', 标签大小=13, 长度=4.6宽度=1.15)# 展示 X和 Y 轴的子位置axxaxisset_minor_locator (股票代码AutoMinorLocator()< span class="0a69-2832-9269-88e2 token punctuation">)axyaxisset_minor_locator(股票代码AutoMinorLocator())#颜色条的设置:公式、字体、字号等if is_cbar:norm =  颜色标准化(vmin=np .分钟(z) vmax=npmax(z)) cbar = plt.colorbar(< /span>cmScalarMappable(norm=规范 cmap=my_cmap)< /span>, ax=ax) cbar.ax.set_ylabel(“密度” fontproperties=font_latex2 labelpad=12) cbaraxtick_params(labelsize =12) 标签 = cbar.ax.< /span>get_xticklabels() + cbar.ax.get_yticklabels( ) [标签set_fontproperties(font_latex2 ) 对于标签 标签中] [标签set_color('黑色') 对于标签 标签中] tick_locator = 股票代码MaxNLocator(nbins=8) cbar定位器= tick_locator cbarupdate_ticks ()#设置X轴和Y轴的实际值范围ax.set_xlim(=-6,=6.0000001)ax.set_xticks(np.arange(-6, 6.000001=2.0 ))ax.set_ylim(底部=-6, top=6.0000001)axset_yticks(np.arange(-6 6.000001 步骤=2.0)) # 画图对象周围的框的加粗一点lw = 1.25 span>ax.spines["右"]set_linewidth(lw)axspines["left" ]set_linewidth(lw)ax.spines[“顶部”]set_linewidth(lw)ax.spines[“底部”]set_linewidth (lw)#设置X轴和Y轴的标签、字体、相对和相对标签关系的坐标轴边界坐标的间距plt.xlabel( "X 标签", fontproperties=font_latex1, labelpad=8plt.ylabel("Y 标签", fontproperties=font_latex1, 标签板=8)# 设置标题字体大小以及距绘制对象的距离plt.title("Python Matplotlib - 密度散点图", fontproperties=font_latex2 , pad=12 )# 文本的位置是根据数据坐标来确定的ax.text(x=-5 , y=4.5, s=r'$\ {R^2} = 0.522$', usetex=True, 字体大小=14, fontweight="粗体" )#显示网格虚线和裂缝plt.grid(alpha=0.360,< /span> ls="--", 其中="主要", 颜色="#A9A9A9")# 紧凑布局plt.tight_layout()plt.savefig("./Figures/密度散点图.png", dpi=300, bbox_inches="紧")plt.显示(< span class="e8b6-b20d-0a69-2832 token punctuation">)

整体解释:Brave代码首先导入了需要的库,然后生成了测试数据 x x x y y < span class="620a-e8b6-b20d-0a69 mord mathnormal" style="margin-right: 0.0359em;">y实际应用还可能是真实的值 y y y 和预测值 y ^ \hat y < span class="0a69-2832-9269-88e2 mord mathnormal" style="margin-right: 0.0359em;">y^)。接着,它使用核密度估计(KDE)来计算数据的密度分布。之后,它得到了一个密度散点图,并使用了一个公式来生成一个曲线。最后,它计算了相关系数和 < span class="8b8a-7af6-c004-61af katex--inline"> R 2 R^2 R< span class="826b-c6a4-8b8a-7af6 sizing Reset-size6 size3 mtight">2 值,并设置了各种图形属性,如坐标轴默认、颜色条、网格等。最后,将图像保存为一个.png 文件并显示出来。

可视化结果如下


📚️ 参考链接:

使用 Python 分散点密度图(用颜色标识密度)复现顶刊 RSE 散点密度验证图(附)代码)

Python 数据可视化之密度散点图 Density Scatter Plot 原创由知识百科栏目发布,感谢您对的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Python 数据可视化之密度散点图 Density Scatter Plot 原创

Copyright © 2012-2023 普诚元亨工作室 版权所有

*本站部分网页素材及相关资源来源互联网,如有侵权请速告知,我们将会在24小时内删除*

Z-BlogPHP 1.7.3 琼ICP备2022020219号