本文主要讲解“python如何绘制中国地图”。本文的解释简单明了,易学易懂。请跟随边肖的思路一起学习学习《巨蟒如何画中国地图》!
从00到1010,与气象学、海洋学和地球科学相关的分析将不可避免地涉及地图的可视化。
在Python中,我用于制图和空间信息分析的公共库是Cartopy。
漫画有一个非常严重的问题,那就是它自己的中文边框数据有问题,这也是很多国外开源库普遍存在的问题。
在做中国区域分析的时候,最标准的方式是同时绘制南海区域的子图,因为九段线的位置很偏南。
在做一些网站展示的时候,如果只单独画几个网站,总觉得很丑,可以加一些地形背景。
综上所述,今天我想用一个小例子来解决这三个问题:
用正确的中国国境线和九段线画一张南海小地图,画一张全球地形图。添加
前言
获取正确的中文矢量文件:微信官方账号后台消息“中国行政区划”
(此矢量文件来自资源环境平台,与权威机构的标准图对比,一致。)获取全局地形图片:微信官方账号后台消息“全局地形”
(提供全球50m分辨率的tif图。如果分辨率要求不高,可以使用stock _ img()
准备工作
#-*-coding : utf-8-*-
importnumpayasnp
importpandasaspd
进口漫画
importcartopy.crsasccrs
importcartopy . featureas feature
from carto py . mpl .gridlineimport经度_FORMATTER,LATITUDE_FORMATTER
from cartopy . io . shapereaderimportreader,natural_earth
importmatplotlib.pyplotasplt
importmatplotlib . tickersmitecker
from matplotlib . imageimportimread
defcreate_map():
shp_path='。/cn _ shp/省份_9/'
#-创建绘图空间
Proj=ccrs。PlateCarree()#创建坐标系
fig=PLT . fig(fig size=(6,8),dpi=400) #创建页面
ax=fig .子图(1,1,子图_kw={'projection':proj})
#-设置地图属性
省份=cfeat。ShapelyFeature(
阅读器(shp_path '省份_9.shp ')。几何图形(),
proj,edgecolor='k ',
(=NationalBureauofStandards)国家标准局
p; facecolor='none'
)
# 加载省界线
ax.add_feature(provinces, linewidth=0.6, zorder=2)
# 加载分辨率为50的海岸线
ax.add_feature(cfeat.COASTLINE.with_scale('50m'), linewidth=0.6, zorder=10)
# 加载分辨率为50的河流~
ax.add_feature(cfeat.RIVERS.with_scale('50m'), zorder=10)
# 加载分辨率为50的湖泊
ax.add_feature(cfeat.LAKES.with_scale('50m'), zorder=10)
ax.set_extent([105, 133, 15, 45])
# ax.stock_img()
ax.imshow(
imread('./NE1_50M_SR_W.tif'),
origin='upper',
transform=proj,
extent=[-180, 180, -90, 90]
)
# --设置网格点属性
gl = ax.gridlines(
crs=ccrs.PlateCarree(),
draw_labels=True,
linewidth=1.2,
color='k',
alpha=0.5,
linestyle='--'
)
gl.xlabels_top = False # 关闭顶端的经纬度标签
gl.ylabels_right = False # 关闭右侧的经纬度标签
gl.xformatter = LONGITUDE_FORMATTER # x轴设为经度的格式
gl.yformatter = LATITUDE_FORMATTER # y轴设为纬度的格式
gl.xlocator = mticker.FixedLocator(np.arange(95, 145 + 5, 5))
gl.ylocator = mticker.FixedLocator(np.arange(-5, 45 + 5, 5))
# --设置小地图
left, bottom, width, height = 0.67, 0.15, 0.23, 0.27
ax2 = fig.add_axes(
[left, bottom, width, height],
projection=proj
)
ax2.add_feature(provinces, linewidth=0.6, zorder=2)
ax2.add_feature(cfeat.COASTLINE.with_scale('50m'), linewidth=0.6, zorder=10)
ax2.add_feature(cfeat.RIVERS.with_scale('50m'), zorder=10)
ax2.add_feature(cfeat.LAKES.with_scale('50m'), zorder=10)
ax2.set_extent([105, 125, 0, 25])
# ax2.stock_img()
ax2.imshow(
imread('./NE1_50M_SR_W.tif'),
origin='upper',
transform=proj,
extent=[-180, 180, -90, 90]
)
return ax
def main():
ax = create_map()
title = f'distribution of station around China'
ax.set_title(title, fontsize=18)
df = pd.read_csv('buyo_position.csv')
df['lon'] = df['lon'].astype(np.float64)
df['lat'] = df['lat'].astype(np.float64)
ax.scatter(
df['lon'].values,
df['lat'].values,
marker='o',
s=10 ,
color ="blue"
)
for i, j, k in list(zip(df['lon'].values, df['lat'].values, df['name'].values)):
ax.text(i - 0.8, j + 0.2, k, fontsize=6)
plt.savefig('station_distribute_map.png')
if __name__ == '__main__':
main()
感谢各位的阅读,以上就是“python怎么绘制中国地图”的内容了,经过本文的学习后,相信大家对python怎么绘制中国地图这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/118548.html