Python中的三元图

12 Apr 2025 | 7 分钟阅读

三元图介绍

三元图是一种三角形图,用于表示三个成分之和恒定的数据,例如比例或百分比。三角形的每个顶点代表一个纯粹的成分,三角形内的点表示所有三个成分的相对贡献。这些图在化学、地质学和社会科学等领域被广泛用于可视化成分关系。

Python 中,像 **Plotly** 和 **Matplotlib** 这样的库可以轻松创建三元图。Plotly 提供交互式功能,而 Matplotlib 允许进行详细的自定义。三元图对于识别数据集中比例是关键的趋势、模式或簇特别有用。通过提供三个成分系统的清晰简洁的可视化,它们有助于有效地理解数据分布和关系。

用于三元图的 Python 库

用于创建三元图的主要 Python 库是

  1. Plotly: 以其交互性而闻名,Plotly 允许用户创建具有缩放和工具提示等功能的动态三元图。它是探索性数据分析的理想选择。
  2. Matplotlib: 通过 mpltern 扩展,Matplotlib 可以生成静态三元图。它高度可定制,非常适合出版级别的可视化。
  3. Seaborn: 尽管 Seaborn 没有专门为三元图设计,但有时可以与 Matplotlib 结合使用以增强样式。
  4. Ternary (Python-Ternary): 一个专门用于静态三元图的库,提供轴缩放、标签和绘图选项的广泛自定义。

这些库根据所需的交互性和自定义级别,为创建有效的三元可视化提供了灵活性。

语法

Plotly Express 是 Plotly 中的一个高级接口,旨在简化各种类型可视化的创建。它支持对结构化数据的轻松处理,并提供直观的方法,用最少的代码生成美观的图表。

对于三元图,Plotly Express 提供了 scatter_ternary() 方法,允许用户可视化分布在三个成分中的成分数据。每个轴代表一个成分,三角形图内的点表示三个 变量 的比例。

该方法支持广泛的自定义,包括轴标签、悬停工具提示和颜色映射。其交互式特性支持缩放、平移和详细的数据探索,使其成为可视化不同领域成分数据集之间关系的绝佳选择。

说明

Plotly Express 中的 scatter_ternary() 方法创建三元散点图,可视化三个成分中的数据。关键参数包括

  • a, b, c: 指定三元图的三个比例成分。它们必须对于每个数据点加起来等于一个常数(例如,1 或 100%)。
  • color: 定义数据点的颜色映射,根据变量进行视觉区分。
  • labels: 一个字典,用于自定义轴或图例标签。
  • width, height: 以像素为单位设置图形的尺寸,以获得更好的布局控制。

此方法简化了交互式三元图的创建,使得分析成分数据中的关系变得容易。

Python 中三元图的实现

本示例演示了如何使用 Plotly 创建一个简单的三元图,以可视化三个变量“统计学”、“商业”和“设计”的比例。图中的每个点代表这些变量的组合,便于在三角形格式中探索它们之间的关系。

示例

输出

Ternary Plots in Python

说明

该代码演示了如何使用 Plotly Express 创建三元图,以可视化统计学、商业和设计三个变量的比例。首先,定义一个名为 data 的字典,其中每个键对应一个变量,值为表示比例(加起来为 1 或 100%)的列表。

使用 Plotly Express 中的 px.scatter_ternary 函数生成图。参数 a、b 和 c 分别映射到“统计学”、“商业”和“设计”变量。title 参数指定图的标题,labels 参数自定义轴标签以提高可读性。

生成的图是交互式的,允许用户将鼠标悬停在点上来查看精确值,进行缩放或平移。最后,fig.show() 在浏览器中显示该图。这种方法非常适合通过直观的可视化来有效地探索和传达成分数据。

Plotly 中的三元轮廓线

Plotly 中的三元轮廓线提供了一种在三个变量的成分数据中可视化密度或梯度的.方法。与散点图不同,轮廓图添加了平滑的线条或着色区域,以表示三角形空间内第四个变量的水平,例如强度、频率或概率。每个顶点对应一个纯粹的成分,轮廓线显示第四个变量随三个成分比例的变化情况。Plotly 的 figure_factory.create_ternary_contour 函数允许用户创建交互式三元轮廓图,提供悬停标签和可自定义的颜色比例等功能,非常适合分析复杂成分数据集。

示例

本示例演示了如何使用 Plotly 的 create_ternary_contour 函数创建三元轮廓图。该图可视化了具有三个变量(a、b 和 c)的成分数据以及由轮廓级别表示的第四个变量(z)。交互式图有助于分析成分数据中的关系和梯度,并具有可自定义的标签和颜色比例。

输出

Ternary Plots in Python

说明

该代码演示了在 Plotly 中创建三元轮廓图,以可视化三个变量(a、b、c)以及定义轮廓级别的第四个变量(z)的成分数据。变量 a、b 和 c 代表三个成分的比例,确保它们加起来等于一个常数(例如,1 或 100%)。

变量 z 是与 a、b 和 c 的每个组合对应的数值,用于在三元空间内创建轮廓线或梯度着色。这些轮廓表示第四个变量在成分数据三角形中的变化情况

使用 Graph_Objects 类

create_ternary_contour 函数生成图,其中 pole_labels 为三角形的顶点分配标签。showscale 参数显示一个颜色条以表示 z 值。最后,fig.show() 函数渲染交互式三元轮廓图,从而能够有效地探索成分数据中的密度或梯度模式。

Plotly 中的 Graph_Objects 类提供了低级别的、灵活的 API,用于创建高度可定制的可视化,包括三元图。与专注于简单性的 Plotly Express 不同,Graph_Objects 允许用户详细定义每个绘图元素,从而对图形的布局、数据轨迹和样式进行完全控制。

对于三元图,scatterternary 轨迹用于绘制基于三个加起来等于常数的成分的数据点。布局可以进行广泛的自定义,包括轴标签、注释、颜色和标题。此类非常适合需要精确自定义或与复杂工作流程集成的高级用例。

示例

输出

Ternary Plots in Python

说明

该代码演示了使用 Plotly 的 Graph_Objects 类和 Scatterternary 轨迹创建三元图。它可视化了 Iris 数据集中三个成分的比例:花瓣宽度、花萼长度和花萼宽度。

go.Scatterternary 方法指定了三元散点图参数

  • a、bc 代表三元图的三个成分,对应于数据集中选择的列。
  • mode 设置为 'markers',表示图将仅显示数据点。
  • marker 自定义数据点的外观,将其颜色设置为蓝色,大小设置为 10,并将每个标记周围的边框宽度设置为 1。

go.Figure 对象包装了三元散点图,fig.show() 渲染了交互式图。这允许探索 Iris 数据集中这三个选定变量之间的关系。它展示了使用 Plotly Graph Objects 自定义可视化的灵活性。

结论

Python 中的三元图是可视化三个变量的成分数据的强大工具。Plotly 和 Matplotlib 等库提供了灵活的选项,用于创建具有可自定义功能的交互式或静态图。这些图有助于识别数据中的模式、关系和梯度,在化学、地质学和社会科学等领域具有极高的价值。无论是使用 Plotly Express 等高级工具,还是通过 Graph Objects 进行详细控制,Python 的生态系统都能够为探索和沟通提供高效、美观的三元数据集分析。

Python 中的三元图对于表示三个成分之和恒定的数据至关重要,提供了清晰、直观的可视化。它们在分析多变量数据分布方面尤其有用。借助交互式功能,它们提供了动态的见解,使其成为数据科学家、研究人员和分析师探索复杂关系和成分数据集趋势的宝贵工具。Plotly、Matplotlib 和 Python-Ternary 等专用工具等库可确保创建视觉信息丰富且可自定义的图的灵活性,从而增强数据探索和演示。