2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個贊
這是一個散點(diǎn)圖,因此反轉(zhuǎn)ys會弄亂數(shù)據(jù),即您的點(diǎn)將(x0, y0)變成(x0, yn).
如果你想翻轉(zhuǎn)ys而不僅僅是翻轉(zhuǎn)繪圖軸,你需要做一些類似的事情ys = (ys.max() + ys.min()) - ys。您可以替換(ys.max() + ys.min())為更合適的數(shù)字。
在您的代碼中,您將替換:
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貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個贊
當(dāng)您繪制散點(diǎn)圖時,matplotlib 所做的是獲取 x 和 y 數(shù)組的第 n 個元素,并使用這些坐標(biāo)繪制一個點(diǎn)。這就是為什么僅僅顛倒順序不起作用的原因(至少我還沒有找到這樣的工作解決方案)。你應(yīng)該做的是正確地轉(zhuǎn)換點(diǎn) - 警告,前面有一些線性代數(shù)!這個想法很簡單:
首先減去每個 xs 點(diǎn)的 xs 均值(它的均值將為零)
然后,用水平翻轉(zhuǎn)矩陣 [[-1, 0], [0, 1]] 變換 xs 和 ys 點(diǎn)
最后,將 xs 均值加回去,因此這些點(diǎn)再次以 x 為中心,位于它們之前的位置
因此,在創(chuàng)建數(shù)組后,您應(yīng)該嘗試以下操作:
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]))
我相信可能有更簡單的方法來做到這一點(diǎn),但我希望這被證明是有用的
添加回答
舉報