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

Mpltern三元hexbin/tribin图与散点图数据不匹配问题求助

问题根源

你的代码存在两个核心问题导致分箱与散点位置不匹配:

  1. 参数传递错误:mpltern的hexbin函数仅需传入三元坐标的前两个分量(如t和l),第三个参数是可选的C(用于分箱着色的数值),而非第三个坐标r。你错误地将z1作为第三个参数传入,导致hexbin把z1当成着色值,而非坐标的一部分。
  2. 坐标未归一化:mpltern的三元坐标系要求三个坐标之和为1,scatter函数会自动对非归一化的坐标做归一化处理,但hexbin不会。你的原始数据x1+y1+z1远小于1,散点图显示的是归一化后的位置,而hexbin使用的是原始未归一化的x1和y1,两者位置自然不匹配。
解决方案

先手动将三元数据归一化,确保三个分量之和为1,再正确调用hexbin函数:

修改后的代码

import numpy as np
import matplotlib.pyplot as plt
import mpltern

x1 = np.array([0.15921388, 0.08445221, 0.13533423, 0.24502292, 0.14315514, 0.14378208,
 0.0905937, 0.13808297, 0.26968698, 0.21460839, 0.19753381, 0.39154374,
 0.2944789, 0.07735608, 0.02421507, 0.15890793, 0.08938327, 0.24203739,
 0.05313224, 0.21074095, 0.02182935, 0.12656056, 0.23842347, 0.10877017,
 0.03686441, 0.1083744, 0.30224614, 0.11176163, 0.01040438, 0.04633287,
 0.04814788, 0.25626729, 0.27124984, 0.29228856, 0.20128026, 0.15314417,
 0.03423973, 0.18703571, 0.50320241, 0.15545899, 0.22140219, 0.15753903,
 0.23184372, 0.17803931, 0.18755939, 0.2624067, 0.1440943, 0.02479316,
 0.21877641, 0.07915115])

y1 = np.array([0.03095992, 0.02485942, 0.00461012, 0.05415974, 0.00641977, 0.0075788,
 0.0134618, 0.00568952, 0.03612804, 0.00746038, 0.00676633, 0.01774103,
 0.01147181, 0.03701774, 0.00521707, 0.01513134, 0.01096237, 0.00535175,
 0.01933876, 0.01067182, 0.00671298, 0.01124348, 0.02042159, 0.01474262,
 0.06801241, 0.04752748, 0.00732321, 0.01774961, 0.02490424, 0.00562966,
 0.01450898, 0.00662498, 0.01217311, 0.00875899, 0.00708021, 0.01435426,
 0.01067889, 0.01273073, 0.01441814, 0.01066786, 0.01154695, 0.01158576,
 0.01315231, 0.00783604, 0.00777104, 0.00740172, 0.0158397, 0.14350677,
 0.00932028, 0.02426256])

z1 = np.array([0.00589924, 0.0057058, 0.00533584, 0.01385247, 0.00517615, 0.01156184,
 0.01189617, 0.00616605, 0.02759438, 0.01694141, 0.00507685, 0.01977934,
 0.01012728, 0.01097368, 0.00841697, 0.01136306, 0.00441427, 0.0087905,
 0.09940766, 0.01501123, 0.00605385, 0.01732032, 0.00804425, 0.0076006,
 0.00622514, 0.02512553, 0.0088141, 0.01543971, 0.01515265, 0.00890357,
 0.0410794, 0.00780079, 0.01436306, 0.03417111, 0.01696163, 0.01495142,
 0.09817156, 0.01281905, 0.01656083, 0.01404464, 0.00711828, 0.00759094,
 0.00899801, 0.02024836, 0.00412182, 0.00507957, 0.00991598, 0.00700659,
 0.00667614, 0.02504912])

# 归一化三元坐标,确保t+l+r=1
total = x1 + y1 + z1
t = x1 / total
l = y1 / total
r = z1 / total

ax = plt.subplot(projection="ternary")

# 散点图使用归一化后的坐标
ax.scatter(t, l, r, color="C3", marker="x")
# hexbin只传前两个归一化坐标,若需要用z1着色则指定C参数
ax.hexbin(t, l, C=z1, edgecolors="none", gridsize=20, vmax=5, zorder=0.0)

plt.show()

关键说明

  • 归一化步骤是核心:将原始数据按总和缩放,保证三个分量之和为1,匹配mpltern三元坐标系的要求。
  • hexbin的正确调用:仅传入前两个归一化后的坐标分量,第三个坐标由t+l+r=1自动推导;若需要根据某个数值(如原始z1)为分箱着色,通过C参数传入即可。

内容的提问来源于stack exchange,提问作者Duncan Moseley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:35:54