我有一个RGBA数组(img
),其中有2D x和y,如下所示:
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))
根据这个question,我们可以传递任何数组来绘图,并使用img
设置颜色:
fig, axs = plt.subplots()
axs.pcolormesh(x, y, img[:, :,0], color=img.reshape((img.shape[0]*img.shape[1]), 4)/255)
但是,它只是改变了edgecolors。
我想把它显示为axs.imshow(img)
2条答案
按热度按时间23c0lvtd1#
更新:这里是给定the trick you found的完整示例代码,以阻止颜色Map颜色的分配。
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
作为中心,你需要减去0.5
作为边界的位置(例如np.arange(10, 21) - 0.5
)。正如Jody Klymak评论的那样,建议不要使用
color
,它指的是facecolor
和edgecolor
。由于边缘与相邻的边缘重叠,当透明度发挥作用时,会出现一些奇怪的效果。nkcskrwz2#
从Matplotlib v3.7开始,RGB(A)数组可以直接传递。https://matplotlib.org/stable/users/prev_whats_new/whats_new_3.7.0.html#pcolormesh-accepts-rgb-a-colors
编辑:注意我将
img
数组转换为float,就像原始数组给我的那样