1

问题

我有两个 100x100 数组 - 一个带有数据(我将称之为array1),另一个带有一些较小的缩放数据(我将称之为array2)。我创建了一个测试数组来查看array2+array1高于或低于某些阈值的位置,每个点的结果应该是三个结果之一 - array1+array2因为该点是 >5、>10 或两者都不是 (<5)。根据结果​​,我创建了一个新的 100x100 数组 (array3),并分别为该点分配了 1.、2. 或 0.。

现在我想使用 来绘制 array1 和 array3 plt.contourf(),并且我希望后一个子图有孵化。我希望该阴影的范围是 x=0、x=1 和 x=2。查看文档我知道我可能不能那样做,所以我会说 x<1、1<=x、<2 和 x=>2。唯一的问题是我不知道如何指定这些范围。

代码(工作示例)

这是问题的完整代码。

#Make data array1
array1 = np.empty([10,10])
for i in range(10):
    for j in range(10):
        array1[i,j] = i+j
print array1

#Make data array2
array2 = np.empty([10,10])
for i in range(10):
    for j in range(10):
        array2[i,j] = (i*0.25)+(j*0.25)
print array2

#Make range test array3
array3 = np.empty([10,10])
for i in range(10):
    for j in range(10):
        if array1[i,j]+array2[i,j] > 5 and array1[i,j]+array2[i,j] > 10:
            array3[i,j] = 2
        elif array1[i,j]+array2[i,j] > 5:
            array3[i,j] = 1
        else:
            array3[i,j] = 0
print array3

#Plot
from matplotlib.patches import Ellipse, Polygon
xgrid = np.arange(0,10)
ygrid = np.arange(0,10)
n_levels=2
plt.contourf(xgrid, ygrid, array1)
stip = plt.contourf(xgrid, ygrid, array3, n_levels, colors='none',
              hatches=[None,'.', '/'],
              extend='lower')
#create a legend for the contour set
artists, labels = stip.legend_elements()
plt.legend(artists, labels, handleheight=2)
plt.show

在此处输入图像描述

注意图例。我希望范围是 x<1、1<=x、<2 和 x=>2,而不是包自动分配的范围。

问题

如何为我的孵化分配自定义范围?我计划让这个例子工作,这样我就可以将它转换为一个底图图,其中我有 lat-lon 数据,最重要的是一个点阵数组,其中 lat-lon 数据与其他两个数组的 data+SD 进行比较. 对于每个网格点,我想要各种点画,如果该纬度数据>一个数据+SD数组,另一个数据+SD数组,或者两个数组。

4

1 回答 1

2

要对等高线水平进行更多控制,请使用levels关键字。

stip = plt.contourf(xgrid, ygrid, array3, levels=[-1, 0, 1, 2],
                    colors='none', hatches=[None,'.', '/'])
artists, labels = stip.legend_elements()
plt.legend(artists, labels, handleheight=2)

在此处输入图像描述

于 2016-12-10T21:23:44.677 回答