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

在VBA中识别坐标数组重复点(附Python参考代码)

识别散点图中的重复坐标点

你的思路已经很清晰啦——遍历每个坐标对、记录已出现的点,遇到重复就标记出来。下面我帮你梳理下现有代码的逻辑,再给出更高效的优化方案,方便后续扩展调整标记尺寸的功能~

原始代码逻辑解析

你当前的代码已经能成功检测重复点,先来看下它的运行逻辑:

x = [1,2,2,4,5,5,5]
y = [1,3,3,4,5,5,5]
pts = []
for i in range(len(x)):
    cX = x[i]
    cY = y[i]
    if (cX, cY) in pts:
        print("duplicate")
        print(cX, cY)
        # 后续可在此处添加标记尺寸调整的代码
    else:
        pts.append((cX, cY))
print(pts)
  • 用空列表pts存储已经出现过的唯一坐标对
  • 遍历每个索引,取出对应的(x,y)组合
  • 若坐标对已在pts中,打印重复提示;否则将其加入列表
  • 最后输出所有不重复的坐标点

不过当数据量较大时,列表的in操作效率偏低(每次都要遍历整个列表),换成字典或者collections.Counter会更高效,还能顺便统计重复次数——正好为后续调整标记尺寸做准备。

优化方案:统计重复次数(适配后续需求)

如果想知道每个点具体重复了多少次,用collections.Counter可以一键完成统计,代码更简洁高效:

from collections import Counter

x = [1,2,2,4,5,5,5]
y = [1,3,3,4,5,5,5]

# 将x、y数组打包成坐标对列表
coordinates = list(zip(x, y))

# 统计每个坐标对的出现频次
point_counts = Counter(coordinates)

# 遍历识别重复点并打印信息
for coord, count in point_counts.items():
    if count > 1:
        print(f"重复点: {coord},重复次数: {count}")
    else:
        print(f"唯一点: {coord}")

# 单独提取所有重复点及其次数
duplicate_points = {coord: count for coord, count in point_counts.items() if count > 1}
print("\n所有重复点统计:", duplicate_points)

这段代码的输出结果:

唯一点: (1, 1)
重复点: (2, 3),重复次数: 2
唯一点: (4, 4)
重复点: (5, 5),重复次数: 3

所有重复点统计: {(2, 3): 2, (5, 5): 3}

后续扩展:调整标记尺寸(提前准备)

等你要绘制散点图时,可以直接用统计出的次数设置标记大小,比如:

import matplotlib.pyplot as plt

# 基础大小 × 重复次数 = 最终标记尺寸
base_size = 50
sizes = [base_size * point_counts[coord] for coord in coordinates]

plt.scatter(x, y, s=sizes)
plt.show()

这样重复次数越多的点,标记就越大,完全贴合你的后续需求~

内容的提问来源于stack exchange,提问作者Markus T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:17:47