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

该博客介绍了一种使用Python的xarray、Basemap和matplotlib库来读取气候数据,并绘制中国地图,展示各省份的温度分布情况。通过设定颜色映射和添加省份名称,使得数据可视化更加直观易懂。
摘要由CSDN通过智能技术生成

# -*- coding: utf-8 -*-

'''

Author: HermionX

source:https://github.com/HermioneX

'''

import numpy as np

import xarray as xr

import os

import datetime

from mpl_toolkits.basemap import Basemap

import matplotlib

matplotlib.use("Agg")

import matplotlib.pyplot as plt

from matplotlib.patches import Polygon

import matplotlib.patches as mpatches

import matplotlib.colors as colors

plt.rcParams['font.sans-serif']=['simhei']

plt.rcParams['axes.unicode_minus'] = False

defaultencoding = 'utf-8'

def plot1pic(src_fn,out_fn,start_str,cnt_str):

print(src_fn)

ds = xr.open_dataset(src_fn)

t = ds['value']*100

t.data[t.data<20] = 0

lons = ds.lon.data

lats = ds.lat.data

temp = xr.DataArray(t.data.T, coords=[lats,lons], dims=['latitude','longitude'])

fig, ax = plt.subplots(figsize = (18,16))

m = Basemap(projection='cyl',resolution='l',llcrnrlon=lons.min(),llcrnrlat=lats.min(),

urcrnrlon=lons.max(),urcrnrlat=lats.max(),lon_0=120.,lat_0=90)

Lon,Lat = np.meshgrid(lons[:],lats[:])

X,Y = m(Lon,Lat)

shp_info3 = m.readshapefile("./CHN_adm_shp/CHN_adm1",'states',drawbounds=True,linewidth = 0.4,zorder=10)

short_state_names = {u"湖北":"Hubei",

u"北京":"Beijing",

u"上海":"Shanghai",

u"天津":"Tianjin",

u"重庆":"Chongqing",

u"香港":"Xianggang",}

printed_names = []

for shapedict, state in zip(m.states_info, m.states):

if shapedict['NAME_1'] not in short_state_names.values(): continue

short_name = short_state_names.keys()[short_state_names.values().index(shapedict['NAME_1'])]

if short_name in printed_names: continue

x, y = np.median(np.array(state),axis=0)

print(x,y)

plt.text(x, y, short_name, ha="center")

printed_names += [short_name]

cm = plt.cm.get_cmap('rainbow')

print(np.min(t.data),np.max(t.data))

cs=m.contourf(X,Y,t.data.T,cmap=cm)

l = 0.95

b = 0.23

w = 0.02

h = 1 - 2*b

plt.title( start_str +' ' +cnt_str,fontdict={'weight':'normal','size': 20},loc ='left')

rect = [l,b,w,h]

cbar_ax = fig.add_axes(rect)

cbar = plt.colorbar(cs,orientation='vertical',cax =cbar_ax)

cbar.ax.tick_params(labelsize = 16)

font = {'family' : 'simhei',

'color' : 'black',

'weight' : 'normal',

'size' : 16,

}

cbar.set_label(u'(%)' ,fontdict=font) #设置colorbar的标签字体及其大小

plt.savefig(out_fn,bbox_inches = 'tight')

---------------------

著作权归作者所有。

商业转载请联系作者获得授权,非商业转载请注明出处。

作者:斩羚_HermionX

format,png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值