我想用MatMattLB在一组轴上绘制几个RGB图像。我最初尝试使用imshow来实现这一点,但它似乎无法处理一组不同范围的轴上的两个图像(当我绘制第二个轴时,它会使第一个轴消失)。我认为这里的答案是使用pcolormesh,比如inHow to plot an irregular spaced RGB image using python and basemap?
但是,这似乎对我不起作用-来自可映射的颜色(即,我传递给pcolormesh的数据数组和我指定的cmap)覆盖我指定的面颜色。网格的边的颜色是对的,但面不是。
有人知道如何直接设置脸的颜色吗?理想情况下,我会使用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

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

最佳答案

解决方案非常简单:我需要做的一件事不是我链接到的问题,那就是从网格对象中移除数组。举个很简单的例子,以防对其他人有帮助:

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

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

10-07 12:53