2 回答

TA貢獻1780條經驗 獲得超4個贊
這是一個散點圖,因此反轉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]))
我相信可能有更簡單的方法來做到這一點,但我希望這被證明是有用的
添加回答
舉報