用Python绘制不规则间隔的RGB图像

时间:2015-03-24 12:16:13

标签: python matplotlib plot

我想用matplotlib在一组轴上绘制几个RGB图像。我最初尝试使用imshow,但它似乎没有处理一组具有不同范围的轴上的两个图像(当我绘制第二个时,它使第一个消失)。我认为这里的答案是使用pcolormesh,就像在How to plot an irregular spaced RGB image using python and basemap?

中一样

然而,这对我来说似乎不起作用 - 来自mappable的颜色(即我传递给pcolormesh的数据数组,以及我指定的cmap)覆盖了我指定的面部颜色。网格的边缘确实有正确的颜色,但不是面部。

有谁知道如何直接设置 faces 的颜色?理想情况下,我会使用一个pcolormesh,它采用n * m * 3数组作为n * m的替代,就像imshow ...

我希望它如何工作的最小例子:     导入numpy为np     将matplotlib.pyplot导入为plt

#make some sample data
x, y = np.meshgrid(np.linspace(0,255,1),np.linspace(0,255,1))
r, g = np.meshgrid(np.linspace(0,255,100),np.linspace(0,255,120))
b=255-r

#this is now an RGB array, 100x100x3 that I want to display
rgb = np.array([r,g,b]).T

m = plt.pcolormesh(x, y, rgb/255.0, linewidth=0)
plt.show()

问题是对plt.pcolormesh的调用失败,带有

numRows, numCols = C.shape
ValueError: too many values to unpack

我想这是因为它想要一个2D数组,而不是最后一个维度为3长的3D数组。

2 个答案:

答案 0 :(得分:4)

解决方案非常简单:我需要做的一件事就是我链接到的问题不是从网格对象删除数组。一个最小的例子,如果它对其他人有帮助:

import numpy as np
import matplotlib.pyplot as plt

#make some sample data
r, g = np.meshgrid(np.linspace(0,255,100),np.linspace(0,255,100))
b=255-r

#this is now an RGB array, 100x100x3 that I want to display
rgb = np.array([r,g,b]).T

color_tuple = rgb.transpose((1,0,2)).reshape((rgb.shape[0]*rgb.shape[1],rgb.shape[2]))/255.0

m = plt.pcolormesh(r, color=color_tuple, linewidth=0)
m.set_array(None)
plt.show()

我猜color_tuple行可能不明显:基本上我们需要将(n,m,3)数组转换为(n * m,3)数组。我认为转置是必要的,以使一切正确匹配。值得注意的是,我们传入的颜色需要是浮点数,介于0和1之间。

答案 1 :(得分:-2)

如何将所有图像组合成一个大的numpy数组,然后用imshow显示?