Matplotlib散点图中相同坐标下如何汇总c参数对应数据值?
问题解答
Matplotlib内置方法说明
Matplotlib没有直接实现「合并重复坐标对应c值总和」的内置功能,必须先对数据进行预处理,再传入散点图函数。
高效数据预处理方案(适配60万级大数组)
针对大数组场景,推荐使用NumPy的向量化操作实现,底层基于C语言优化,性能远高于Python循环或zip+集合的方法。核心思路是:
- 将x、y坐标对合并为二维数组,识别唯一坐标
- 对每个唯一坐标对应的data值求和
代码实现
import numpy as np # 原始数据 x = np.array([3, 7, 12, 3, 56, 4, 2, 3, 65, 87, 12, 3, 9, 7, 87]) y = np.array([7, 24, 87, 9, 65, 43, 54, 9, 3, 8, 34, 9, 23, 6, 8]) data = np.array([6, 45, 4, 25, 7, 45, 78, 4, 82, 3, 9, 43, 32, 5, 9]) # 合并x、y为坐标对(二维数组,每行对应一组(x,y)) coords = np.column_stack((x, y)) # 获取唯一坐标,以及每个原始坐标对应的唯一坐标索引 unique_coords, inverse_indices = np.unique(coords, axis=0, return_inverse=True) # 对每个唯一坐标对应的data值求和 summed_data = np.bincount(inverse_indices, weights=data) # 拆分唯一坐标为新的x、y数组 new_x = unique_coords[:, 0] new_y = unique_coords[:, 1] # 输出结果 print("处理后x:", new_x) print("处理后y:", new_y) print("处理后data:", summed_data)
结果验证
运行后得到的核心数据与示例完全匹配(唯一坐标的顺序可能因NumPy版本略有差异,但数据准确性不受影响):
- 坐标
(3,9)对应的data总和为25+4+43=72 - 坐标
(87,8)对应的data总和为3+9=12
性能优势
该方案全程使用NumPy内置函数,避免了Python层面的循环操作,处理60万级数组仅需毫秒级时间,远快于纯Python实现。
内容的提问来源于stack exchange,提问作者Cymylau
相关产品推荐
相关产品推荐

