如何在matplotlib中创建自定义阴影范围?

时间:2016-12-09 22:29:12

标签: python matplotlib range contourf stipple

问题

我有两个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< =< 1<<>,&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

enter image description here

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

问题

如何为孵化分配自定义范围?我打算让这个例子工作,所以我可以把它转换成一个Basemap图,其中我有lat-lon数据,最重要的是一个点画数组,其中lat-lon数据与data + S.D进行比较。另外两个数组。我希望各种点画取决于每个网格点,如果该lat-lon数据是>一个数据+ S.D。数组,其他数据+ S.D。数组或两个数组。

1 个答案:

答案 0 :(得分: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)

enter image description here