You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python Plotly绘制带连接线的三元图(ternary chart)

带连接线的三元图实现方案

数据预处理说明

你当前构造的数据集不符合三元图的坐标要求:三元图三个轴的坐标值必须满足同一点位的三个坐标和为固定常数(通常归一化到和为1),你提供的样本点三个变量求和均大于1,需要先做行维度的归一化处理。

你提到的scatter_ternary仅支持散点绘制是认知误区:matplotlib 3.4+版本内置的三元投影坐标轴,同时支持plot()方法绘制连接线、scatter()方法绘制散点,不需要额外引入其他专用库即可实现你要的效果。

实现步骤

  • 安装依赖(如果未安装matplotlib和pandas)
pip install pandas matplotlib
  • 完整可运行代码
import pandas as pd
import matplotlib.pyplot as plt

# 加载原始示例数据
dummy_data = [
    {"var1":0.74, "var2":.60, "var3":.78, "comp":"option1"},
    {"var1":0.8, "var2":0.75, "var3":0.72, "comp":"option2"}
]
table = pd.DataFrame.from_dict(dummy_data)

# 三元坐标归一化:每行三个值除以该行总和,保证a+b+c=1
coord_cols = ["var1", "var2", "var3"]
table[coord_cols] = table[coord_cols].div(table[coord_cols].sum(axis=1), axis=0)

# 创建三元图画布
fig, ax = plt.subplots(
    subplot_kw={'projection': 'ternary'},
    figsize=(8, 7)
)

# 绘制点位连接线
ax.plot(
    table["var1"], table["var2"], table["var3"],
    color="#2563eb", linewidth=2, linestyle="-"
)

# 绘制散点(参数和你之前用的scatter_ternary完全兼容)
ax.scatter(
    table["var1"], table["var2"], table["var3"],
    s=90, color="#f97316", zorder=6
)

# 为每个点位添加标签
for _, row in table.iterrows():
    ax.text(
        row["var1"], row["var2"], row["var3"],
        row["comp"], fontsize=10,
        ha="left", va="bottom"
    )

# 配置轴标签与网格
ax.set_tlabel("var1")
ax.set_llabel("var2")
ax.set_rlabel("var3")
ax.grid(True, alpha=0.3)

plt.show()

扩展说明

  • 如果你需要绘制多组不同类别的连线,只需要按分类字段拆分DataFrame,循环调用plot()和scatter()即可,每组可单独配置颜色、线型、点样式。
  • 如果需要绘制闭合的轮廓线,只需要在连线的坐标序列末尾追加第一个点的坐标,就能实现闭合效果。
  • 如果你的数据本身已经满足三个坐标和为固定值,可以跳过归一化步骤直接绘图。

内容的提问来源于stack exchange,提问作者Leonardo Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:36:18