[英]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()
PS:還要注意img.reshape(-1, 4)
是img.reshape(img.shape[0]*img.shape[1], 4)
的快捷方式(並且更易於維護)版本。
另請注意, x
和y
指的是單元格之間的邊界,並且需要比每個維度中的單元格數多一個值。 因此,我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.