三元图可视化:数据中三变量关系的直观呈现
创作时间:
2025-01-21 23:49:32
作者:
@小白创作中心
三元图可视化:数据中三变量关系的直观呈现
三元图(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
定义一个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()
在上面的三元图中,蓝色的阴影区域展示了三维变量之间的分布情况,颜色越深代表概率密度越大,等高线的增加使得图形更具表现力。该图形非常适合展示三维比例之间的相互关系,通过这张图可以看到,当 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()
为了进一步展示三元图的表现力,我们可以对不同的条件(如不同的alpha参数)进行可视化,生成多张三元图进行对比。通过这四个三元图,可以观察到Dirichlet分布的形状随着alpha参数的不同而变化。当alpha值较为均衡时,分布接近三元图的中心,且较为对称;当alpha值差异较大时,分布会向值较大的变量倾斜。
热门推荐
嫩食记教你省钱又美味的肉类搭配秘籍!
丽水美食登上央视!七县市特色佳肴大赏
浙江省丽水市莲都区旅游景点大全
经合组织:全球经济正在好转,今明两年增速将稳定在3.2%
红酒配肉,谁是你的完美CP?
猪肉、牛肉、鸡肉怎么吃才健康?最新研究告诉你答案
肉食爱好者的必修课:从两本权威指南中掌握肉类搭配技巧
商纣王与妲己:从甲骨文到文学的真相探寻
邓婵玉:《终极封神》最燃女战神!
齐齐哈尔到重庆怎么走最快最省钱:自驾游省钱路线指南
怎样给喜欢的人写情书:浪漫又不失真挚的秘诀
PS图像精修完全指南:从瑕疵修复到完美调色
当爱变成控制:如何应对伴侣的控制欲?
中国研究人员首次拍摄到神秘球状闪电!
存款利率倒挂背后:你的钱袋子受影响了吗?
四级警长在基层警务中的职责与重要性解析
“严禁下班后开会”!美的集团内部发文简化工作方式
无人机飞手入门指南
项目文章eLife | 单细胞分辨率下宿主与共生菌互作研究成果
爱恨、嫉妒和同情的情感根源是什么?如何化解负面情绪?
微信视频号爆红秘籍:如何让你的短视频火遍全网?
“冰敷”很容易搞错受伤,来看常见错误和正确打开方式
如何保养膝关节,骨科医生给您日常生活8个建议
生日祝福文案大集合:朋友圈必刷爆!
暖心回复:一封走心的生日祝福感谢信
生日祝福回复:感谢你的暖心祝福,让我们继续在各自的城市闪闪发光!
致我的公主殿下:一封暖心的生日祝福回复
朋友圈最火的生日祝福文案,你用了吗?
6个关键点!《叶黄素和玉米黄质与视觉健康》白皮书科学解读
从“眼泪女王”到《爱在天摇地动时》,狗血剧为何如此吸引人?