簡體   English   中英

如何使用 2D x 和 y 對 RGBA 數組進行 pcolormesh?

[英]How to pcolormesh RGBA array with 2D x and y?

我有一個帶有 2D x 和 y 的 RGBA 數組( img ),如下所示:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(100)

x = np.arange(10, 20)
y = np.arange(0, 10)
x, y = np.meshgrid(x, y)

img = np.random.randint(low=0, high=255, size=(10, 10, 4))

根據這個問題,我們可以將任何數組傳遞給 plot 並使用img設置顏色:

fig, axs = plt.subplots()
axs.pcolormesh(x, y, img[:, :,0], color=img.reshape((img.shape[0]*img.shape[1]), 4)/255)

然而,它只是改變了邊緣顏色。

邊緣顏色

我想像axs.imshow(img)一樣顯示它

顯示

也許 matplotlib 已經改變了一點它是如何工作的? (或者也許老問題只適用於Basemap ?)現在顏色映射僅在繪制 plot 時分配,因此覆蓋通過color=分配的 colors 。

似乎有效的是一個虛擬抽獎,然后才分配新的 colors:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(100)

x = np.arange(10, 21)
y = np.arange(0, 11)
x, y = np.meshgrid(x, y)

img = np.random.randint(low=0, high=255, size=(10, 10, 4))

fig, ax = plt.subplots()
mesh = ax.pcolormesh(x, y, img[:, :,0])
fig.canvas.draw() # dummy redraw
mesh.set_color(img.reshape(-1, 4)/255)
plt.show()

改變顏色的 pcolormesh

PS:還要注意img.reshape(-1, 4)img.reshape(img.shape[0]*img.shape[1], 4)的快捷方式(並且更易於維護)版本。

另請注意, xy指的是單元格之間的邊界,並且需要比每個維度中的單元格數多一個值。 因此,我np.arange(10, 20)增加到np.arange(10, 21) ,但是如果您想要10..19作為中心,則需要為邊界的 position 減去0.5 (例如np.arange(10, 21) - 0.5 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM