三元图可视化:数据中三变量关系的直观呈现

大模型数据安全机器学习

picture.image

背景

在多维数据的可视化中,三元图(Ternary Plot)是一种非常有效且直观的工具。它可以将三个变量的关系呈现于二维平面上,帮助我们理解变量之间的相互依赖与分布情况,本文将带大家深入了解三元图的使用方法,通过代码演示如何绘制出不同条件下的三元图

什么是三元图?

三元图是一种用于展示三变量比例的图表,每个变量的值介于0到1之间,并且这三个值的和为1,三元图常用于表示组成部分的百分比,例如市场份额、成分分析等,三元图的三条边分别对应三个变量,当一个点位于某条边上时,代表该变量值为1,其他两个为0

三元图的优势

  • 直观可视化: 三元图可以直观地呈现三个变量之间的相互关系,非常适合用于成分分析、混合物分析等场景
  • 丰富的表现力 : 通过不同的颜色和等高线,三元图能够进一步展示变量在不同区域的分布密度

代码实现

数据整理


          
import matplotlib.pyplot as plt
          
from mpltern.datasets import get_dirichlet_pdfs
          
import pandas as pd
          
# 定义 alpha 参数
          
alpha = (2.0, 4.0, 8.0)
          
# 获取 Dirichlet 分布的概率密度函数 (PDF) 数据
          
t, l, r, v = get_dirichlet_pdfs(n=61, alpha=alpha)
          
df = pd.DataFrame({
          
    'x1': t,
          
    'x2': l,
          
    'x3': r,
          
    'pdf': v
          
})
          
df
      

picture.image

定义一个Dirichlet分布的alpha参数, 使用get_dirichlet_pdfs函数生成三元图所需的三个变量(x1、x2、x3)和相应的概率密度值(pdf), 将生成的数据存储为一个Pandas数据框,以便后续分析或可视化

绘制三元图


          
fig = plt.figure(figsize=(8, 6),dpi=1200)
          
# 绘制三元图
          
ax = fig.add_subplot(1, 1, 1, projection="ternary")
          
# 设置颜色映射和阴影
          
cmap = "Blues"
          
shading = "gouraud"
          
# 绘制三元图的颜色图
          
cs = ax.tripcolor(t, l, r, v, cmap=cmap, shading=shading, rasterized=True)
          
# 添加等高线
          
ax.tricontour(t, l, r, v, colors="k", linewidths=0.5)
          
ax.set_tlabel("$x_1$")
          
ax.set_llabel("$x_2$")
          
ax.set_rlabel("$x_3$")
          
ax.set_title("${\\mathbf{\\alpha}}$=" + str(alpha))
          
cax = ax.inset_axes([1.05, 0.1, 0.05, 0.9], transform=ax.transAxes)
          
colorbar = fig.colorbar(cs, cax=cax)
          
colorbar.set_label("PDF", rotation=270, va="baseline")
          
plt.savefig("1.pdf", format='pdf', bbox_inches='tight')
          
plt.show()
      

picture.image

在上面的三元图中,蓝色的阴影区域展示了三维变量之间的分布情况,颜色越深代表概率密度越大,等高线的增加使得图形更具表现力。该图形非常适合展示三维比例之间的相互关系,通过这张图可以看到,当 x1 取较低值(接近0),x2 和 x3 取中间值时,概率密度达到最大,这些结果可以用来分析数据中变量之间的相互影响,尤其是在三变量关系的场景下

不同条件下的三元图对比


          
fig = plt.figure(figsize=(10.8, 8.8),dpi=1200)
          
fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, wspace=0.5, hspace=0.5)
          
# 定义 alpha 参数
          
alphas = ((1.5, 1.5, 1.5), (5.0, 5.0, 5.0), (1.0, 2.0, 2.0), (2.0, 4.0, 8.0))
          

          
# 循环绘制四个不同的三元图
          
for i, alpha in enumerate(alphas):
          
    ax = fig.add_subplot(2, 2, i + 1, projection="ternary")
          
    
          
    # 获取 Dirichlet 分布的概率密度函数 (PDF) 数据
          
    t, l, r, v = get_dirichlet_pdfs(n=61, alpha=alpha)
          
    
          
    # 设置颜色映射和阴影
          
    cmap = "Blues"
          
    shading = "gouraud"
          
    
          
    # 绘制三元图的颜色图
          
    cs = ax.tripcolor(t, l, r, v, cmap=cmap, shading=shading, rasterized=True)
          
    
          
    # 添加等高线
          
    ax.tricontour(t, l, r, v, colors="k", linewidths=0.5)
          
    
          
    # 设置标签
          
    ax.set_tlabel("$x_1$")
          
    ax.set_llabel("$x_2$")
          
    ax.set_rlabel("$x_3$")
          
    
          
    # 设置标题
          
    ax.set_title("${\\mathbf{\\alpha}}$=" + str(alpha))
          
    
          
    # 插入颜色条
          
    cax = ax.inset_axes([1.05, 0.1, 0.05, 0.9], transform=ax.transAxes)
          
    colorbar = fig.colorbar(cs, cax=cax)
          
    colorbar.set_label("PDF", rotation=270, va="baseline")
          
plt.savefig("2.pdf", format='pdf', bbox_inches='tight')
          
plt.show()
      

picture.image

为了进一步展示三元图的表现力,我们可以对不同的条件(如不同的alpha参数)进行可视化,生成多张三元图进行对比,通过这四个三元图,可以观察到Dirichlet分布的形状随着alpha参数的不同而变化。当alpha值较为均衡时,分布接近三元图的中心,且较为对称;当alpha值差异较大时,分布会向值较大的变量倾斜

往期推荐

SCI图表复现:整合数据分布与相关系数的高级可视化策略

复现顶刊Streamlit部署预测模型APP

树模型系列:如何通过XGBoost提取特征贡献度

不止 SHAP 力图:LIME 实现任意黑盒模型的单样本解释

特征选择:Lasso和Boruta算法的结合应用

从基础到进阶:优化SHAP力图,让样本解读更直观

SCI图表复现:优化SHAP特征贡献图展示更多模型细节

多模型中的特征贡献度比较与可视化图解

picture.image

picture.image

picture.image

微信号|deep_ML

欢迎添加作者微信进入Python、ChatGPT群

进群请备注Python或AI进入相关群
无需科学上网、同步官网所有功能、使用无限制

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动 XR 技术的探索与实践
火山引擎开发者社区技术大讲堂第二期邀请到了火山引擎 XR 技术负责人和火山引擎创作 CV 技术负责人,为大家分享字节跳动积累的前沿视觉技术及内外部的应用实践,揭秘现代炫酷的视觉效果背后的技术实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论