gpt4 book ai didi

python - 如何在 matplotlib 中将散点大小转换为数据坐标?

转载 作者:太空狗 更新时间:2023-10-30 00:17:17 25 4
gpt4 key购买 nike

我想以编程方式测试两个散点图字形是否会在 matplotlib 中重叠。所以给定一对 (x, y) 坐标和一个大小(据我所知是圆的面积,以点为单位),我想绘制

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

然后有一个名为 points_overlap 的函数,它接受这些参数并在点重叠时返回 True,否则返回 False

def points_overlap(x, y, s):
if ...
return True
else:
return False

我知道有转换矩阵可以带我在不同的 matplotlib coordinate systems 之间,但我想不出编写此函数的正确步骤。

最佳答案

这需要一些测试,但它可能有效吗?这些都应该在显示空间

def overlap(x, y, sx, sy):
return np.linalg.norm(x - y) < np.linalg.norm(sx + sy)

测试:

In [227]: X = np.array([[1, 1], [2, 1], [2.5, 1]])
In [228]: s = np.array([20, 10000, 10000])

In [229]: fig, ax = plt.subplots()

In [230]: ax.scatter(X[:, 0], X[:, 1], s=s)
Out[230]: <matplotlib.collections.PathCollection at 0x10c32f28>

In [231]: plt.draw()

测试每一对:

Xt = ax.transData.transform(X)
st = np.sqrt(s)

pairs = product(Xt, Xt)
sizes = product(st, st)

for i, ((x, y), (sx, sy)) in enumerate(zip(pairs, sizes)):
h = i % 3
j = i // 3
if h != j and overlap(x, y, sx, sy):
print((i, h, j))

enter image description here

还有很大的改进空间。转换所有数据并将其传递到 points_overlap 函数而不是在内部进行转换可能更容易。实际上会好得多。

关于python - 如何在 matplotlib 中将散点大小转换为数据坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27258886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com