world map without rivers with matplotlib / Basemap?

后端 未结 7 689
生来不讨喜
生来不讨喜 2021-01-31 10:37

Would there be a way to plot the borders of the continents with Basemap (or without Basemap, if there is some other way), without those annoying rivers coming along? Especially

7条回答
  •  无人共我
    2021-01-31 11:00

    Following user1868739's example, I am able to select only the paths (for some lakes) that I want: world2

    from mpl_toolkits.basemap import Basemap
    import matplotlib.pyplot as plt
    
    fig = plt.figure(figsize=(8, 4.5))
    plt.subplots_adjust(left=0.02, right=0.98, top=0.98, bottom=0.00)
    m = Basemap(resolution='c',projection='robin',lon_0=0)
    m.fillcontinents(color='white',lake_color='white',zorder=2)
    coasts = m.drawcoastlines(zorder=1,color='white',linewidth=0)
    coasts_paths = coasts.get_paths()
    
    ipolygons = range(83) + [84] # want Baikal, but not Tanganyika
    # 80 = Superior+Michigan+Huron, 81 = Victoria, 82 = Aral, 83 = Tanganyika,
    # 84 = Baikal, 85 = Great Bear, 86 = Great Slave, 87 = Nyasa, 88 = Erie
    # 89 = Winnipeg, 90 = Ontario
    for ipoly in ipolygons:
        r = coasts_paths[ipoly]
        # Convert into lon/lat vertices
        polygon_vertices = [(vertex[0],vertex[1]) for (vertex,code) in
                            r.iter_segments(simplify=False)]
        px = [polygon_vertices[i][0] for i in xrange(len(polygon_vertices))]
        py = [polygon_vertices[i][2] for i in xrange(len(polygon_vertices))]
        m.plot(px,py,linewidth=0.5,zorder=3,color='black')
    
    plt.savefig('world2.png',dpi=100)
    

    But this only works when using white background for the continents. If I change color to 'gray' in the following line, we see that other rivers and lakes are not filled with the same color as the continents are. (Also playing with area_thresh will not remove those rivers that are connected to ocean.)

    m.fillcontinents(color='gray',lake_color='white',zorder=2)
    

    world3

    The version with white background is adequate for further color-plotting all kind of land information over the continents, but a more elaborate solution would be needed, if one wants to retain the gray background for continents.

提交回复
热议问题