Python-气象-大气科学-可视化绘图系列—— 地图上自动标注省会名称(demo调整中)(代码+示例)

Posted zhanling

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-气象-大气科学-可视化绘图系列—— 地图上自动标注省会名称(demo调整中)(代码+示例)相关的知识,希望对你有一定的参考价值。

本文为原创文章

本文链接:https://www.cnblogs.com/zhanling/p/12606990.html

 

  1 # -*- coding: utf-8 -*-
  2 
  3 
  4 ‘‘‘
  5 Author: HermionX
  6 
  7 source:https://github.com/HermioneX
  8 ‘‘‘
  9 
 10 import numpy as np
 11 import xarray as xr
 12 import os
 13 import datetime
 14 from mpl_toolkits.basemap import Basemap
 15 import matplotlib 
 16 matplotlib.use("Agg")
 17 import matplotlib.pyplot as plt
 18 from matplotlib.patches import Polygon
 19 import matplotlib.patches as mpatches
 20 import matplotlib.colors as colors
 21 plt.rcParams[font.sans-serif]=[simhei]
 22 plt.rcParams[axes.unicode_minus] = False
 23 defaultencoding = utf-8
 24  
 25 
 26 def plot1pic(src_fn,out_fn,start_str,cnt_str): 
 27     print(src_fn)
 28     ds = xr.open_dataset(src_fn)
 29     t =  ds[value]*100 
 30     t.data[t.data<20] = 0
 31     lons = ds.lon.data
 32     lats = ds.lat.data
 33     temp = xr.DataArray(t.data.T, coords=[lats,lons], dims=[latitude,longitude])
 34 
 35     fig, ax = plt.subplots(figsize = (18,16))
 36 
 37     m = Basemap(projection=cyl,resolution=l,llcrnrlon=lons.min(),llcrnrlat=lats.min(),
 38             urcrnrlon=lons.max(),urcrnrlat=lats.max(),lon_0=120.,lat_0=90)
 39     Lon,Lat = np.meshgrid(lons[:],lats[:])
 40     X,Y = m(Lon,Lat)
 41     shp_info3 = m.readshapefile("./CHN_adm_shp/CHN_adm1",states,drawbounds=True,linewidth = 0.4,zorder=10)
 42 
 43     short_state_names  =  {u"湖北":"Hubei",
 44                             u"北京":"Beijing",
 45                             u"上海":"Shanghai",
 46                             u"天津":"Tianjin",
 47                             u"重庆":"Chongqing",
 48                             u"香港":"Xianggang",
 49                             u"澳门":"Aomen",
 50                             u"安徽":"Anhui",
 51                             u"福建":"Fujian",
 52                             u"广东":"Guangdong",
 53                             u"广西":"Guangxi",
 54                             u"贵州":"Guizhou",
 55                             u"甘肃":"Gansu",
 56                             u"海南":"Hainan",
 57                             u"河北":"Hebei",
 58                             u"河南":"Henan",
 59                             u"黑龙江":"HeiLongjiang",
 60                             u"湖北":"Hubei",
 61                             u"湖南":"Hunan",
 62                             u"吉林":"Jilin",
 63                             u"江苏":"Jiangsu",
 64                             u"江西":"Jiangxi",
 65                             u"辽宁":"Liaoning",
 66                             u"内蒙古":"Neimenggu",
 67                             u"宁夏":"Ningxia",
 68                             u"青海":"Qinghai",
 69                             u"陕西":"Shanxi",
 70                             u"山西":"Shanxi",
 71                             u"山东":"Shandong",
 72                             u"四川":"Sichuan",
 73                             u"台湾":"Taiwan",
 74                             u"西藏":"Xizang",
 75                             u"新疆":"Xinjiang",
 76                             u"云南":"Yunnan",
 77                             u"浙江":"Zhejiang",}
 78 
 79     printed_names = []
 80 
 81     for shapedict, state in zip(m.states_info, m.states):
 82         if shapedict[NAME_1] not in short_state_names.values(): continue
 83         short_name = short_state_names.keys()[short_state_names.values().index(shapedict[NAME_1])]
 84         if short_name in printed_names: continue
 85         x, y = np.median(np.array(state),axis=0)
 86         print(x,y)
 87         plt.text(x, y, short_name, ha="center")
 88         printed_names += [short_name] 
 89 
 90 
 91     cm = plt.cm.get_cmap(rainbow)
 92     print(np.min(t.data),np.max(t.data))
 93     cs=m.contourf(X,Y,t.data.T,cmap=cm)
 94 
 95     l = 0.95
 96     b = 0.23
 97     w = 0.02
 98     h = 1 - 2*b
 99 
100     plt.title( start_str +              +cnt_str,fontdict={weight:normal,size: 20},loc =left)
101     rect = [l,b,w,h] 
102     cbar_ax = fig.add_axes(rect)
103     cbar = plt.colorbar(cs,orientation=vertical,cax =cbar_ax)
104     cbar.ax.tick_params(labelsize = 16)
105     font = {family : simhei,
106         color  : black,
107         weight : normal,
108         size   : 16,
109         }
110     cbar.set_label(u(%) ,fontdict=font) #设置colorbar的标签字体及其大小
111     plt.savefig(out_fn,bbox_inches = tight)

技术图片

以上是关于Python-气象-大气科学-可视化绘图系列—— 地图上自动标注省会名称(demo调整中)(代码+示例)的主要内容,如果未能解决你的问题,请参考以下文章

数据可视化应用气象绘图(附Python代码)

数据可视化应用气象绘图(附Python代码)

新闻动态丨机器学习在大气科学中的可解释性研究讨论会

科研生态学重要中文核心杂志

Python可视化应用实战案例30篇-基础绘图命令详解含大量示例代码(附Python代码)

Python可视化应用实战案例30篇-基础绘图命令详解含大量示例代码(附Python代码)