使用pcolor在python中绘制3个数组
我读了一张卫星图像,从图像中获取数据,lat和lon,然后放入一个阵列。lat的尺寸为(135,90),lon的尺寸也为(135,90)。数据的维度最初是(135,90,4,9,8),其中4表示图像的频带。经过处理(使用for循环将所有波段放在一幅图像中),数据的尺寸为biw(1215720),即(135 x 9,90 x 8)。我有一段代码,它是:使用pcolor在python中绘制3个数组,python,image-processing,numpy,matplotlib,Python,Image Processing,Numpy,Matplotlib,我读了一张卫星图像,从图像中获取数据,lat和lon,然后放入一个阵列。lat的尺寸为(135,90),lon的尺寸也为(135,90)。数据的维度最初是(135,90,4,9,8),其中4表示图像的频带。经过处理(使用for循环将所有波段放在一幅图像中),数据的尺寸为biw(1215720),即(135 x 9,90 x 8)。我有一段代码,它是: x = lat # dimension (135,90) y = lon # dimension (135,90) z = data #
x = lat # dimension (135,90)
y = lon # dimension (135,90)
z = data # dimension ( 1215, 720)
plt.figure()
plt.pcolor(x,y,z)
plt.colorbar()
plt.savefig("proj1.png")
但随后它在下面产生了一个非常糟糕的形象:
我的朋友之前告诉我应该在lat和lon中取更多的点,以便使其与数据的维度相同。但我不知道怎么做。他说的方法正确吗?又是我。。。matplotlib的文档在这里说 X和Y,如果给定,指定彩色四边形的(X,Y)坐标;C[i,j]的四边形在以下位置有角: 理想情况下,X和Y的尺寸应比C的尺寸大一倍;如果尺寸相同,则C的最后一行和最后一列将被忽略 然而,C的尺寸(或形状)与X和Y完全不同。matplotlib通常希望您准备(1)X,Y是网格点(或角点)的X和Y坐标,(2)C是由4个相邻网格点包围的瓷砖的值。所以x的形状,y是135和90。然后颜色应该是134乘89,或者135和90 我的理解是,这个C的数据来自modis像素,你们已经有了135x90。所以你应该指定12150瓷砖的角点。。。有道理?若知道中心点的纬度/经度,则将其向左/向下移动半个距离,然后在右/上方添加一行和一列以创建栅格点。如果使用投影坐标而不是lat/lon,则情况相同。或者你可以忘记这些半程交易,只需插入你已经得到的X和Y(135x90),以及C,它必须是135x90,才能使用pcolor (135,90,4,9,8)中的9,8是什么意思?每个水平网格单元是否有9*8个不同的属性?e、 垂直层、不同种类的化学物质或物理性质?如果是这样,您必须选择一个,并一次绘制一个图(即,仅输入135x90的C以及您的X和Y)。另外,你提到4代表“乐队”。如果这个id色带像RGBK,你想显示这个颜色,那么pcolor可能不好,你必须寻找一些其他的函数或者理解这4个数字的东西。pcolor只需读取数字范围,然后应用最小值和最大值之间的比例,然后应用从蓝色到红色的颜色比例(或任何您选择的颜色比例) 编辑 我抓取了一个1B级的数据集,以及来自的文档 该数据集由AIRS 1A级数字编号(DN)生成,包括频谱0.4至1.0 um区域内的4个通道。一天的AIRS数据分为240个场景,每个场景持续6分钟。对于AIRS可见光/近红外测量,单个场景包含135条扫描线,其中扫描线包含720个交叉轨迹像素和9个沿轨迹像素;每个场景总共有720 x 9 x 135=874800个可见/近红外像素 因此,最简单的方法是获得每个位置的8x9值的平均值,并从四个轨迹中一次选择一个。或者,由于这些波段对应不同的颜色,如下面的波长所示
- 第一频道:0.41微米-0.44微米
- 第二频道:0.58微米-0.68微米
- 第三频道:0.71微米-0.92微米
- 第四频道:0.49微米-0.94微米
(X[i, j], Y[i, j]),
(X[i, j+1], Y[i, j+1]),
(X[i+1, j], Y[i+1, j]),
(X[i+1, j+1], Y[i+1, j+1]).