2 回答
TA贡献1780条经验 获得超3个赞
这是一个散点图,因此反转ys会弄乱数据,即您的点将(x0, y0)变成(x0, yn).
如果你想翻转ys而不仅仅是翻转绘图轴,你需要做一些类似的事情ys = (ys.max() + ys.min()) - ys。您可以替换(ys.max() + ys.min())为更合适的数字。
在您的代码中,您将替换:
ax2.scatter(xs, ys, color=str(colors[idx]))
和:
xs = np.asarray(xs)
ys = np.asarray(ys)
# reverse ys
ys = (ys.max() + ys.min()) - ys
ax2.scatter(xs, ys, color=str(colors[idx]))
TA贡献1804条经验 获得超3个赞
当您绘制散点图时,matplotlib 所做的是获取 x 和 y 数组的第 n 个元素,并使用这些坐标绘制一个点。这就是为什么仅仅颠倒顺序不起作用的原因(至少我还没有找到这样的工作解决方案)。你应该做的是正确地转换点 - 警告,前面有一些线性代数!这个想法很简单:
首先减去每个 xs 点的 xs 均值(它的均值将为零)
然后,用水平翻转矩阵 [[-1, 0], [0, 1]] 变换 xs 和 ys 点
最后,将 xs 均值加回去,因此这些点再次以 x 为中心,位于它们之前的位置
因此,在创建数组后,您应该尝试以下操作:
xs_mean = sum(xs) / len(xs)
matrix = [[-1, 0], [0, 1]]
xss, yss = [], []
for x, y in zip(xss, yss):
[x, y] = np.matmul(matrix, [x, y])
xss.append(x + x_mean)
yss.append(y)
ax2.scatter(xss, yss, color=str(colors[idx]))
我相信可能有更简单的方法来做到这一点,但我希望这被证明是有用的
添加回答
举报