ric*_*man 4 python plot matplotlib
我想用matplotlib在一组轴上绘制几个RGB图像。我最初尝试使用imshow进行此操作,但是它似乎无法在一组具有不同范围的轴上处理两个图像(当我绘制第二个图像时,它会使第一个图像消失)。我认为这里的答案是使用pcolormesh,例如如何使用python和basemap绘制不规则间隔的RGB图像?
但是,这似乎对我不起作用-来自mappable的颜色(即,我传递给pcolormesh的数据数组,以及我指定的cmap)覆盖了我指定的面部颜色。网格的边缘确实具有正确的颜色,但面没有。
有谁知道如何直接设置面孔的颜色?理想情况下,我会使用一个采用n * m * 3数组的pcolormesh来替代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()
Run Code Online (Sandbox Code Playgroud)
问题是对plt.pcolormesh的调用失败,
numRows, numCols = C.shape
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
我猜这是因为它想要一个2D数组,而不是最后一个维度为3的3D数组。
解决方案非常简单:我要做的一件事不是我链接到的问题,就是从网格对象中删除数组。一个最小的示例,以防对他人有所帮助:
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()
Run Code Online (Sandbox Code Playgroud)
我猜color_tuple行可能不是很明显:本质上,我们需要将(n,m,3)数组变成(n * m,3)数组。我认为转置是使所有内容正确匹配所必需的。还值得注意的是,我们传入的颜色必须为0到1之间的浮点数。