几个要点

1、原始数据是站点数据,故要用插值法转成格点数据

2、涉及到指定地图范围的色斑图,必须用到地图白化,借鉴原文:哔哩哔哩 搜索摸鱼气象&       Pthon 白化绘图基础,这里就不粘贴了,涉嫌广告。

3、绘制等值线用函数Axes.contour(*argsdata=None**kwargs)

等值线填图用函数Axes.contourf(*argsdata=None**kwargs)

先贴一张成品图:强降水次数分布图

代码涉及到的数据有一个降水的excel文档,和一个本市的分县shp文档

# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
from scipy.interpolate import Rbf  # 径向基函数 : 将站点信息插到格点上 用于绘制等值线import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib as mplimport cartopy.crs as ccrs  # 默认投影
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import geopandas as gpd
from matplotlib.path import Path
from cartopy.mpl.patch import geos_to_pathplt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号# 数据准备
df = pd.read_excel(r'C:\……\rain.xlsx')  # 读取Excel
lon = df['Lon']
lat = df['Lat']
count = df['PRE_1h_Count']# 绘图准备
olon = np.linspace(114.5, 115.75, 100)  # 经纬坐标,0.05°分辨率 114°到117°0.05分辨率是有60个格点
olat = np.linspace(29.5, 30.5, 80)  # 纬度坐标,0.05°分辨率
olon, olat = np.meshgrid(olon, olat)  # 生成坐标网格 meshgrid网格化
func = Rbf(lon, lat, count, function='linear')  # 插值函数 调用Rbf插值函数中的 cubic 插值法linear
count_new = func(olon, olat)  # 插值
# count_new[count_new < 0] = 0   # 如果插值有可能涉及到负数,那么将其设置为0# 画布及绘图声明
fig = plt.figure(figsize=(12, 8), facecolor='#666666', edgecolor='Blue', frameon=False)  # 画布
proj = ccrs.PlateCarree()ax = fig.add_subplot(111, projection=proj)  # 绘图区# 色彩定制
clevs = [10, 20, 30, 40, 50]  # 自定义颜色列表
cdict = ['#87CEFA', '#1E90FF', '#4169E1','#000080']  # 自定义颜色列表 '#A9F090','#40B73F','#63B7FF','#0000FE','#FF00FC','#850042'
my_cmap = colors.ListedColormap(cdict)  # 自定义颜色映射 color-map
norm = mpl.colors.BoundaryNorm(clevs, my_cmap.N)  # 基于离散区间生成颜色映射索引#  绘制等值线、等值线填色
cf = ax.contourf(olon, olat, count_new, clevs, transform=proj, cmap=my_cmap, norm=norm)
# c1 = ax.contour(olon, olat, count_new, levels=[35], colors='purple', linewidths=3, linestyles='--', transform=proj)
position = fig.add_axes([0.77, 0.15, 0.03, 0.2])  # 位置【左,下,宽。高】
plt.colorbar(cf, cax=position)  # 颜色参照表
position.set_yticklabels((10, 20, 30, 40, 50))
ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label=True))
ax.yaxis.set_major_formatter(LatitudeFormatter())
ax.set_xticks(np.arange(114.4, 115.8, 0.2), crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(29.4, 30.4, 0.2), crs=ccrs.PlateCarree())
# ax.gridlines()  # 显示背景线# 边界白化
shp = gpd.read_file(r'C:\……\420200.shp',encoding='utf-8')  # utf 8 编码 或gbk编码  a = shp['geometry'][shp['name'].isin(['**区','**区','**区','**区','**县','**市'])]
# 生成裁剪路径 – 关键操作1
path_clip = Path.make_compound_path(*geos_to_path(a.to_list()))
# 将裁剪路径应用到图层 – 关键操作2
[collection.set_clip_path(path_clip, transform=ax.transData) for collection in cf.collections]
# 绘制多边形边缘线
ax.add_geometries(a, crs=ccrs.PlateCarree(), facecolor='none', edgecolor='black')plt.show()

之前一直研究一个maskout.py文件,总是不能正常白化,干脆去学习了下白化的原理,其实也不难,就是程序最后几排的代码,关键要对自己的shp文件有一个了解,才能得出正确的边界,并且白化用的python包,安装的有时候会不成功,需要多试几次。

使用matplotlib画色斑图相关推荐

  1. python 画三维函数图-如何用Matplotlib 画三维图的示例代码

    最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感 三维的线图和散 ...

  2. python画三维立体图-如何用Matplotlib 画三维图的示例代码

    用Matplotlib画三维图 最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平 ...

  3. 如何使用python画折线图-Python 使用 matplotlib 画折线图教程

    话不多说,直接上代码.最近修改一篇论文,实验部分的图全部重画了一下,也正好在此进行整理.使用 Python 的 matplotlib 库来画图还是比较方便的,今天整理一下用 matplotlib 画折 ...

  4. python怎样画立体图-如何用Matplotlib 画三维图的示例代码

    用Matplotlib画三维图 最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平 ...

  5. python画厢式图_用matplotlib画箱体图(boxplot)

    画boxplot的接口为 matplotlib.pyplot.boxplot,不过在画之前,我需要好好理解一下箱体图所代表的含义和计算方法. 用一个实际的例子来说明如何画boxplot,这个例子来自w ...

  6. Matplotlib画折线图

    Matplotlib画折线图 有一些离散点,想看看这些点的变动趋势: import matplotlib.pyplot as pltx1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1 ...

  7. Matplotlib画蜡烛图

    mpl_finance.candlestick_ohlc() 以前使用Matplotlib画蜡烛图的时候是使用matplotlib.finance这个工具库里面candlestick_ohlc函数,最 ...

  8. python画三维立体图完整代码_如何用Matplotlib 画三维图的示例代码

    最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感 三维的线图和散 ...

  9. python设置折线图标题字体为宋体_python中matplotlib画折线图实例(坐标轴数字、字符串混搭及标题中文显示)...

    最近在用python中的matplotlib画折线图,遇到了坐标轴 "数字+刻度" 混合显示.标题中文显示.批量处理等诸多问题.通过学习解决了,来记录下.如有错误或不足之处,望请指 ...

  10. 防止matplotlib画完图后自动关闭

    为防止matplotlib画完图后自动关闭图像窗口,可以在代码的尾部加上 pyplot.pause(0) 例: import tensorflow as tf import numpy as np i ...

最新文章

  1. python画图的模块_用python和pygame游戏编程入门-画图模块
  2. AMT:管理咨询冲击“最后一公里”
  3. 关于微型计算机主板的描述错误的是,2016年9月计算机一级考试试题及答案「单选」...
  4. 词法分析(2)---NFA
  5. 图像压缩哪家强?请看这份超详细对比
  6. Windows Server 2008 R2中的托管服务帐号(MSA)-冯立亮
  7. PHP基础知识之文件加载
  8. 新句子:没有谁比我更懂XX,抓普也不行
  9. 数据库可疑修复的方法
  10. Java对excel表格操作
  11. 【电脑突然识别不了外置光驱】
  12. ttest函数使用方法_TTEST 函数的学习方法(Excel)
  13. 【调剂】西安工业大学刘欢教授“宽光谱量子点成像”科研团队接收5名调剂学生...
  14. Hive基础之创建数据库
  15. UNCTF 2022 部分WP
  16. 一位linux强人安装Ubuntu8.04的经验(转)
  17. springboot 在线调整日志级别
  18. 支持+86的手机和电话号码验证正则表达式
  19. openwrt 无线桥接(AP)
  20. 2022-2028年全球及中国斯特林发动机行业投资前景分析

热门文章

  1. 用java语言求老汉卖西瓜程序_Java编程练习题
  2. 项目管理系列:项目启动会
  3. java 二分查找法和顺序查找法的效率比较
  4. 数据结构题集c语言版题目与答案,数据结构题集(C语言版)答案 - 严蔚敏编著...
  5. 华为NP课程笔记7-BGP1
  6. Oracle分析函数
  7. optisystem中器件的学习(4-Test Sets/Passives Library/Optical Switches)
  8. 汇编语言程序设计入门
  9. 创意网页排版设计和教程分享,打造 “视”不可挡的网页设计
  10. 计算机数控模拟操作步骤,数控仿真