专栏名称: 小猿猴GISer
GIS遥感交流学习
目录
相关文章推荐
龙视新闻在线  ·  高校聘请兼职教师,这些人可参与→ ·  21 小时前  
龙视新闻在线  ·  高校聘请兼职教师,这些人可参与→ ·  21 小时前  
玩物志  ·  曾在风口浪尖的明星 AI ... ·  2 天前  
刀法研究所  ·  老铺黄金2024年净利润同比大涨;南京德基广 ... ·  2 天前  
刀法研究所  ·  人群越小生意越大?悦鲜活靠什么1年卖出35亿? ·  2 天前  
51好读  ›  专栏  ›  小猿猴GISer

HF.087|像顶刊一样绘制带九段线的中国地图,就是这么简单

小猿猴GISer  · 公众号  ·  · 2024-08-16 17:29

正文


九段线, 即南海诸岛归属范围线,是中国对南海海域权益边界的一种画法。在中华人民共和国版图中,在南中国海里有9条断续线组成的U形线,通常称为九段线,线内区域为中国南海。因此,九段线区分了南中国海(面积350万平方公里)与中国南海(面积210万平方公里)。九段线是中国“传统海疆线”,它不仅是南海诸岛的“岛屿归属线”,而且是中国南海管辖海域的“范围线”。这客观地反映了中国人民最早发现南海诸岛,最先开发南海资源,并实施有效控制的准确空间。


01

顶刊美图展示


在数据可视化中,地图是一个强大的工具。今天,我们来学习如何绘制一幅带九段线的中国地图,让你的图表更具专业性和美感。下面带大家欣赏一些顶刊上的带九段线的中国地图。


左右滑动查看顶刊结果图

在广袤的版图上,勾勒出九段线,诉说着中国的辽阔与壮美。 绘制地图,不仅是地理的呈现,更是历史与文化的交汇。 让数据与艺术相结合,一幅地图,尽显大国风范。 九段线如同悠扬的旋律,勾勒出中国南海的独特韵律。 细致的线条承载着厚重的历史,地图上的每一笔都有故事。 用科技与创意绘制中国地图,感受疆域的恢弘与壮丽。 # 科学可视化 📊💧 "

左右滑动查看顶刊结果图


02

绘图展示


利用 Arcgis和python 不同方式实现高级的绘图,接下来跟随小编一起实践一下吧。

2.1 Arcgis绘制带九段线的中国地图

(1)打开ArcGIS Administrator,把语言调成“English”,这一步是为了经纬度标定时出现“30°东”等汉字。

(2)依次导入“重分类后的tif”、“mask”(即需要框选经纬度的范围)和“九段线和群岛”。导入群岛时发现投影不一样,该数据的投影是GCS_Beijing_54,而其它两数据投影是“GCS_WGS_1984”,因此需要定义投影,我已经变换好了投影,所以直接导入我变换好之后的投影“九段线和群岛_ty”,如果还是有问题需要自己变换。

(3)切换布局视图,打开数据框属性,插入格网。创建完成后,点击属性,修改字体大小与格式,这里修改为“Times New Roman”

(4)然后裁剪到我们的mask区域,在Data Frame里,这两处都要修改。

(5)新建一个数据框,先添加九段线数据,再添加tif,再调整到合适位置。可以右键自行选择合适的范围,一般要露出九段线与台湾岛。


2.2 用python绘制带九段线的中国地图

绘制地图(以上图片的绘制),利用python的matplotlib包按照下面的代码步骤即可完成绘制。

dimport geopandas as gpd import cartopy.crs as ccrsimport cartopy.feature as cfeatureimport matplotlib.pyplot as pltimport numpy as npimport matplotlib.colors as mcolors
projn = ccrs.LambertConformal(central_longitude=105,                              central_latitude=40,                              standard_parallels=(25.0, 47.0))
fig = plt.figure(figsize=(6, 7), dpi=200, facecolor="w")ax = fig.add_subplot(projection=projn)ax.add_feature(cfeature.LAND, facecolor='white')ax.add_feature(cfeature.OCEAN)ax.add_feature(cfeature.LAKES.with_scale('110m'), facecolor='#BEE8FF')ax.set_extent([70, 140, 15, 52], crs=ccrs.PlateCarree())
long = np.linspace(72, 136, 128)lat = np.linspace(18, 54, 72)
# 创建颜色映射器cmap = plt.get_cmap('RdYlBu_r')norm = mcolors.Normalize(vmin=0, vmax=2000)
im = ax.contourf(    long, lat[::-1], prcp1,    levels=np.linspace(0, 2000, 11), cmap=cmap,    extend='both', alpha=0.8, transform=ccrs.PlateCarree())
cbar = fig.colorbar(    im, ax=ax, shrink=0.9, pad=0.1, orientation='horizontal')
add_dashline(ax, ec="black", linewidth=.2)add_china(ax, ec="black", fc="None", linewidth=.2)
gls = ax.gridlines(draw_labels=True, crs=ccrs.PlateCarree(),                   color='k', linestyle='dashed', linewidth=0.3,                   y_inline=False, x_inline=False,                   xlocs=range(70, 150, 10), ylocs=range(15, 65, 10)                  )
# 创建南海诸岛小图ax2 = fig.add_axes([0.7, 0.258, 0.2, 0.3], projection=projn) # left, bottom, width, heightax2.set_extent([104.5, 125, 0, 26])im2 = ax2.contourf(    long, lat[::-1], prcp1,    levels=np.linspace(0, 2000, 11), cmap=cmap,    extend='both', alpha=0.8, transform=ccrs.PlateCarree())ax2.set_facecolor('#BEE8FF')ax2.spines['geo'].set_linewidth(.2)lb = ax2.gridlines(draw_labels=False, x_inline=False, y_inline=False,                   linewidth=0.1, color='gray', alpha=0.8,                   linestyle='--' )add_dashline(ax2, ec="black", linewidth=.2)add_china(ax2, ec="black", fc="None", linewidth=.2)ax2.add_feature(cfeature.LAND, facecolor='w')ax2.add_feature(cfeature.OCEAN)ax2.add_feature(cfeature.LAKES.with_scale('110m'), facecolor='#BEE8FF')
# 计算各个区间的像素值数量levels = np.linspace(0, 2000, 11)hist, bins = np.histogram(prcp1, bins=levels)
# 在左下角添加统计图ax_hist = fig.add_axes([0.17, 0.33, 0.18, 0.09]) # left, bottom, width, heightfor i in range(len(hist)):    ax_hist.bar(bins[i], hist[i], width=np.diff(bins)[i],                color=cmap(norm(bins[i])), edgecolor='black', alpha=0.7)
ax_hist.set_xlim(-100, 2000)  # 稍微扩大左边界ax_hist.tick_params(axis='both', which='both', length=0)ax_hist.set_xticklabels([])






请到「今天看啥」查看全文