亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

反轉數組中的點 - Matplotlib

反轉數組中的點 - Matplotlib

慕后森 2023-05-09 16:09:47
我在 Matplotlib 中繪制了一系列點。這是我的代碼:masked = r['masks']  fig=plt.figure()  ax2=fig.add_axes([0,0,1,1])  colors = ['b', 'g', 'r', 'c', 'm','y']  for idx in range(masked.shape[2]):    array = masked[:,:,idx]    xs = []    ys = []    for i in range(len(array)):        for j in range(len(array[0])):            if array[i][j] == True:                xs.append(j)                ys.append(i)    # ys.reverse()    ax2.scatter(xs, ys, color=str(colors[idx]))    plt.show()這給了我這個情節: 情節 1當我在上面的代碼片段中取消注釋時ys.reverse(),我希望圖像垂直翻轉,但我卻得到了這個,這是完全錯誤的:地塊 2我該如何解決這個問題并使情節正確翻轉?注意:我不想要這樣的解決方案plt.gca.invert_yaxis()- 我想要更正點數組。謝謝,Vineeth
查看完整描述

2 回答

?
Helenr

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]))


查看完整回答
反對 回復 2023-05-09
?
狐的傳說

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]))

我相信可能有更簡單的方法來做到這一點,但我希望這被證明是有用的


查看完整回答
反對 回復 2023-05-09
  • 2 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號