【问题标题】:Using pcolor to plot 3 arrays in python使用 pcolor 在 python 中绘制 3 个数组
【发布时间】:2011-12-18 09:50:09
【问题描述】:

我读取了一张卫星图像,并从图像中获取了纬度和经度数据并放入了一个数组中。 lat 的维度是 (135,90),lon 也是 (135,90)。数据的维度原来是(135,90,4,9,8),其中4代表图像的波段。处理后(使用 for 循环将所有波段放在单个图像中),数据的维度为 biw (1215,720),即 (135 x9, 90 x 8)。我有一段代码,就是:

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

但是它在下面产生了一个非常糟糕的图像:

我的朋友告诉我之前我应该​​在纬度和经度上取更多分,以便使其与数据具有相同的维度。但不知道该怎么做。他说的方法对吗?

【问题讨论】:

    标签: python image-processing numpy matplotlib


    【解决方案1】:

    又是我... matplotlib 的文档在这里说http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.pcolor

    X 和 Y,如果给定,指定彩色四边形的 (x, y) 坐标; C[i,j] 的四边形在以下位置有角:

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

    理想情况下,X 和 Y 的尺寸应该比 C 大一;如果维度相同,则 C 的最后一行和最后一列将被忽略。

    然而 C 的维度(或形状)与 X 和 Y 完全不同。matplotlib 理想地希望您准备(1)X,Y 是网格点(或角点)的 x 和 y 坐标,以及(2) C 是被 4 个相邻网格点包围的瓦片的值。所以你的 x,y 形状是 135 和 90。那么颜色应该是 134 x 89,或者 135 和 90。

    我的理解是这个 C 的数据来自 modis 像素,并且您已经拥有它们 135x90。所以你应该指定那些 12150 瓦片的角点......有意义吗?如果您知道中心点的纬度/经度,则将它们向左/下方移动一半距离,然后在右侧/上方添加一行和一列以创建网格点。如果您使用投影坐标而不是纬度/经度,那也是一样的。或者您可以忘记这些半距离交易,只需按原样插入您已经获得的 X 和 Y (135x90),以及必须为 135x90 的 C,才能使用 pcolor。

    (135,90,4,9,8)中的9,8是什么意思?每个水平网格单元格是否有 9*8 不同的属性?例如垂直层,不同种类的化学物质,还是物理性质?如果是这样,您必须一次选择一个并制作一个情节(即,仅提供 135x90 的 C 以及您的 X 和 Y)。另外,您提到 4 代表“乐队”。如果这个 id 颜色带像 RGBK 并且您想显示该颜色,那么可能 pcolor 不好,您必须寻找其他一些功能或理解这 4 个数字的东西。 pcolor 只需读取数字范围,然后在 min 和 max 之间应用比例,然后将颜色比例从蓝色应用到红色(或者你选择的任何值)

    编辑

    我从http://disc.sci.gsfc.nasa.gov/AIRS/data-holdings/by-access-method 获取了一个可见的Level-1B 数据集以及文档。

    此数据集由 AIRS 1A 级数字数字 (DN) 生成,包括频谱 0.4 至 1.0 um 区域中的 4 个通道。一天的 AIRS 数据分为 240 个场景,每个场景持续 6 分钟。对于 AIRS 可见/近红外测量,单个场景包含 135 条扫描线,其中一条扫描线包含 720 个交叉轨迹像素和 9 个沿轨迹像素;每个场景总共有 720 x 9 x 135 = 874,800 个可见/近红外像素。

    最简单的方法是为每个位置获取 8x9 值的平均值,然后一次选择四个轨道之一。或者,由于这些波段对应不同的颜色,如下面的波长所示,

    • 通道 1:0.41 um - 0.44 um
    • 通道 2:0.58 um - 0.68 um
    • 通道 3:0.71 um - 0.92 um
    • 通道 4:0.49 um - 0.94 um

    您可能会将这些用作 pylab 的 imshow() 函数输入的 RGBK 值。您可能不喜欢空间平均后输出的粗分辨率。在这种情况下,您必须以某种方式获取每个位置内每个 (9,8) 像素的坐标。但是应该有一个标准的方式,数据是广泛使用的公共数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多