首页 > 解决方案 > 如何在底图图中的栅格字段周围绘制线边框?

问题描述

我正在使用绘图中的contourf函数在地图上绘制一些标量字段Basemap(例如,见下文)。但是,我希望 Basemap 在每个标量字段覆盖的区域周围绘制边框。这是因为字段是无缝的,但分辨率不同,我希望能够区分哪些区域被哪个字段覆盖。每个字段都有简单的直线纬度/经度边界,因此边界很简单(只有四个纬度/经度段)。这样做有没有直接的警惕?

    m8 = Basemap(projection='tmerc', lon_0=125, lat_0=26.2, width=1.5e6, 
                  height=1.4e6, resolution='i', ax = a8)

    # Coordinates for the child and parent grids respectively
    tsx, tsy = m8(lon_rho, lat_rho)
    tsx2, tsy2 = m8(lon_rho2, lat_rho2)
    m8.drawparallels(np.arange(0.,81,5.), labels=[0,1,1,0], linewidth=0.5,
                    **{'fontsize':7})
    m8.drawmeridians(np.arange(0.,351.,5.), labels=[0,1,1,0], linewidth=0.5, 
                    **{'fontsize':7})

    # Parent field
    m8_2 = m8.contourf(tsx2, tsy2, sst_a2, levels=np.linspace(tmin,tmax,num=25),cmap=cmo.thermal, vmin=tmin, vmax=tmax)

    # Child field
    m8_ = m8.contourf(tsx, tsy, sst_a, levels=np.linspace(tmin,tmax,num=25),cmap=cmo.thermal, vmin=tmin, vmax=tmax)

    m8c = m8.contour(tsx, tsy, sst_a, levels=range(tmin, tmax+1), colors='k', linestyles='dashed', linewidths=0.5, alpha=0.8)
    m8c.levels = [nf(val) for val in m8c.levels]
    fmt = '%r'
    a8.clabel(m8c,m8c.levels, fmt=fmt, inline=True, fontsize=8, colors='k')
    cNorm = colors.Normalize(vmin=tmin, vmax=tmax)

标签: pythonmatplotlibmatplotlib-basemap

解决方案


您的每个标量字段都有自己的一组数据,(tsx, tsy). 从一组此类数据中,您可以创建convexhull可用于表示绘图上每个填充轮廓的范围的多边形。

如果您可以将reproducible代码与数据共享,更多人可以提供帮助,并且答案将更加详尽。


推荐阅读