Cartopy中pcolormesh的问题

时间:2017-07-07 22:39:24

标签: python matplotlib cartopy

我试图将圆形南极立体图的Cartopy example plot调整到北极并向其添加数据。我有几个问题。

首先,在示例代码中,在海洋特征之前添加陆地特征。当我这样做时,我得到了一张只有海洋的地图。我在下面的代码中颠倒了调用的顺序,得到了陆地和海洋的地图。为什么其他订单适用于South Polar示例?

其次,更重要的是,我无法弄清楚为什么我的pcolormesh调用没有任何效果。

我使用的是Python 2.7.7,matplotlib 1.5.1和Cartopy 0.15.1。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<br>                                                                   
<br>
<input type="text" id="member" name="member" value="">
 <br>
 <br>

 <button>Generate Sector Properties</button>
Here div "sector_prop" is

<div class="sector_prop">
<fieldset>
Primary LTE Carrier (Select lowest frequency on the site 850 for Band 5, AWS 
for Band 4 and PCS for Band 2)<br>
<br>
<select name="lte_freq1">
<option value="6">850</option>
<option value="2">AWS</option>
<option value="4">PCS</option>
</select>
<br>
</fieldset>
</div>

1 个答案:

答案 0 :(得分:2)

您的代码离开 cartopy 来指示地图上特征图的顺序,因此,某些功能可以隐藏,没有任何线索。可以明确指定绘图的顺序。

要素图的顺序由zorder控制,在大多数绘图语句中可以使用zorder=integer指定。这是一个修改后的代码,可以产生更好的情节。

# your data
lats = np.linspace(60, 90, 30)
lons = np.linspace(0, 360, 160)
X,Y = np.meshgrid(lons, lats)
Z = np.random.normal(size = X.shape)

# new data for pcolormesh plot
latz = np.linspace(75, 90, 15)
lonz = np.linspace(0, 360, 160)
X1,Y1 = np.meshgrid(lonz, latz)
Z1 = np.random.normal(size = X1.shape)

def main():
    fig = plt.figure(figsize=[10, 10])
    ax = plt.subplot(1, 1, 1, projection=ccrs.NorthPolarStereo())
    fig.subplots_adjust(bottom=0.05, top=0.95,
                        left=0.04, right=0.95, wspace=0.02)

    # Limit the map to -60 degrees latitude and below.
    ax.set_extent([-180, 180, 60, 60], ccrs.PlateCarree())

    ax.gridlines()

    # zorder can be used to arrange what is on top
    ax.add_feature(cartopy.feature.LAND, zorder=4)   # land is specified to plot above ...
    ax.add_feature(cartopy.feature.OCEAN, zorder=1)  # ... the ocean

    # Compute a circle in axes coordinates, which we can use as a boundary
    # for the map. We can pan/zoom as much as we like - the boundary will be
    # permanently circular.
    theta = np.linspace(0, 2*np.pi, 100)
    center, radius = [0.5, 0.5], 0.5
    verts = np.vstack([np.sin(theta), np.cos(theta)]).T
    circle = mpath.Path(verts * radius + center)

    ax.set_boundary(circle, transform=ax.transAxes)
    # pcolormesh is specified to plot on top of the ocean but below land
    ax.pcolormesh(X1, Y1, Z1, transform=ccrs.PlateCarree(), zorder=3)

    plt.show()

if __name__ == '__main__':
    main()

enter image description here