Python绘制污染玫瑰图
文章目录
- 获取数据
- 处理数据
- 生成网格数据
- 绘制污染玫瑰图
整体的思路是使用contourf
函数实现污染玫瑰图,具体步骤如下:
- 读取数据
- 处理数据
- 数据网格化
- 绘制污染玫瑰图
最终效果如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
获取数据
这里我使用的是完整的数据,其中没有nan(缺失值)。我建议在绘图之前如果有缺失或异常数据需要认真处理。这里我们主要展示绘图部分
数据获取地址
file = r'../data/20年2月污染气象参数.xls'
data = pd.read_excel(file, usecols=['时间', '风速(m/s)', '风向(deg)', 'PM2.5'], index_col=0).iloc[:115, :]
data
风向(deg) | 风速(m/s) | PM2.5 | |
---|---|---|---|
时间 | |||
2020-02-01 00:00 | 229.9 | 1.3 | 106 |
2020-02-01 01:00 | 239.3 | 1.1 | 110 |
2020-02-01 02:00 | 243.2 | 0.7 | 98 |
2020-02-01 03:00 | 292.7 | 0.4 | 77 |
2020-02-01 04:00 | 288.2 | 0.5 | 85 |
... | ... | ... | ... |
2020-02-05 14:00 | 75.9 | 4.3 | 9 |
2020-02-05 15:00 | 73.3 | 4.3 | 12 |
2020-02-05 16:00 | 79.1 | 4.5 | 1 |
2020-02-05 17:00 | 74.2 | 4.4 | 8 |
2020-02-05 18:00 | 77.7 | 4.3 | 4 |
115 rows × 3 columns
处理数据
- 将风向数据转化为弧度数据
data['风向(deg)'] = np.radians(data['风向(deg)'])
- 处理风速风向分类的单位
v = data['风速(m/s)']
# 风速按16等分分类
speed = np.linspace(v.min(), v.max(), endpoint=True, num=16)
# 风向按32等分分类
deg = np.linspace(0, 2*np.pi, endpoint=True, num=32)
生成网格数据
def maker(s, sequence):'''将划分网格内的数据按较小值划分'''for i, val in enumerate(sequence):if s <= sequence[i+1]:return val
d = data['风向(deg)']
data['风速(m/s)'] = v.apply(maker, sequence=speed)
data['风向(deg)'] = d.apply(maker, sequence=deg)
data.head()
风向(deg) | 风速(m/s) | PM2.5 | |
---|---|---|---|
时间 | |||
2020-02-01 00:00 | 3.850985 | 1.14 | 106 |
2020-02-01 01:00 | 4.053668 | 0.86 | 110 |
2020-02-01 02:00 | 4.053668 | 0.58 | 98 |
2020-02-01 03:00 | 5.067085 | 0.30 | 77 |
2020-02-01 04:00 | 4.864402 | 0.30 | 85 |
- 使用mean方法对PM2.5数据进行栅格化分类
# 由于整体PM2.5数据有标记,所以需要将2.5数据处理成float类型
data['PM2.5'] = data['PM2.5'].astype(float)
dt = data.pivot_table(values='PM2.5', index='风速(m/s)', columns='风向(deg)', aggfunc=np.mean)
# 补齐网格并对于缺失的网格用0值填充,这样绘图的效果好一些
dt.fillna(0, inplace=True)
dt = dt.reindex(index=speed, columns=deg, fill_value=0)
dt.head(6)
风向(deg) | 0.000000 | 0.202683 | 0.405367 | 0.608050 | 0.810734 | 1.013417 | 1.216100 | 1.418784 | 1.621467 | 1.824151 | ... | 4.459035 | 4.661718 | 4.864402 | 5.067085 | 5.269768 | 5.472452 | 5.675135 | 5.877819 | 6.080502 | 6.283185 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
风速(m/s) | |||||||||||||||||||||
0.30 | 62.0 | 61.0 | 78.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 85.0 | 77.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
0.58 | 82.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 65.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 93.5 | 0.0 |
0.86 | 65.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
1.14 | 0.0 | 89.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 66.0 | 30.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
1.42 | 0.0 | 0.0 | 0.0 | 0.0 | 37.0 | 0.0 | 0.0 | 0.0 | 91.5 | 24.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
1.70 | 67.0 | 114.0 | 0.0 | 78.0 | 0.0 | 36.0 | 21.0 | 0.0 | 32.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
6 rows × 32 columns
绘制污染玫瑰图
meshgrid()
将网格数据生成绘制数据
theta, r = np.meshgrid(deg, speed)
- 使用
contourf()
绘制污染玫瑰图
ax = plt.subplot(projection='polar')
ax.set_theta_zero_location("N")
ax.set_theta_direction('clockwise')
pos = ax.contourf(theta, r, dt.to_numpy(), cmap='jet')
plt.colorbar(pos, ax=ax)
plt.show()
Python绘制污染玫瑰图相关推荐
- python绘制风向玫瑰图
一.风向.流向角度和数学角关系. 1.数学角和风向角相互转换. 数学角向东为0°,按照逆时针旋转. 北风为0°,即指向南为0°,顺时针增加 数学角转风向角: (1)根据u,v获得数学角: (2)根据数 ...
- python画动图-Python绘制动态水球图过程详解
先来看看绘制的动态水球图: 没有安装PyEcharts的,先安装PyEcharts: # 安装pyecharts模块,直接安装就是最新的版本pip install pyecharts 安装好PyEch ...
- python画折线图显示点值-Python 绘制可视化折线图
1. 用 Numpy ndarray 作为数据传入 ply import numpy as np import matplotlib as mpl import matplotlib.pyplot a ...
- python画折线图代码-python绘制简单折线图代码示例
1.画最简单的直线图 代码如下: import numpy as np import matplotlib.pyplot as plt x=[0,1] y=[0,1] plt.figure() plt ...
- python绘制雷达图代码实例-使用python绘制温度变化雷达图
本文实例为大家分享了python绘制温度变化雷达图的具体代码,供大家参考,具体内容如下 假设某天某地每三个小时取样的气温为 针对温度变化趋势绘制雷达图: 代码如下: import numpy as n ...
- python画折线图详解-python绘制简单折线图代码示例
1.画最简单的直线图 代码如下: import numpy as np import matplotlib.pyplot as plt x=[0,1] y=[0,1] plt.figure() plt ...
- python台风动图绘制_使用Python绘制台风轨迹图的示例代码
参考: 使用CMA热带气旋最佳路径数据集,对我国周边的台风进行绘制 import re import os import numpy as np import matplotlib.pyplot as ...
- python画折线图代码实现_python如何绘制分布折线图 python绘制分布折线图代码示例...
python如何绘制分布折线图?本篇文章小编给大家分享一下python绘制分布折线图代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 用Pyth ...
- python能画k线图吗_,求教使用python绘制K线图
如何用python实现视频关键帧提取并保存为图片 import cv2 vc = cv2.VideoCapture('Test.avi') #读入视频文件 c=1 if vc.isOpened(): ...
- python画简单图-python绘制简单彩虹图
本文实例为大家分享了python绘制彩虹图的具体代码,供大家参考,具体内容如下 代码: from turtle import * #控制彩虹路径 def path(pen, r, g, b): pen ...
最新文章
- boost::smart_ptr模块boost/pointer_to_other.hpp 的测试
- spring +springmvc+mybatis组合springmvc.xml文件配置
- 【第一部分】01Leetcode刷题
- mysql bin 分析_mysql bin log 分析
- Git VsCode 一步一步把本地目录放到git仓库
- 【Arduino】颜色识别的智能搬运机器人设计
- matlab输出工作区,matlab保存工作区数据
- Excel批量自动填充行号
- 20190905层析分析法matlab,未通过一致性检验时,重新构造判断矩阵再计算
- VS2013使用技巧汇总
- Nitro League 出品 | P2E 系列 101——第三部分
- uni-ui简单入门教程 - 如何用HBuilderX为uni-app项目启用uni-ui扩展组件?
- 高德3D动态地图—旋转视角
- 详解Https出现的前因后果
- 计算机辅助英语教学 教材,英语教学课中计算机辅助
- 给网站戴上「安全套」
- 【软件推荐】集tftp client、Server、syslog功能于一体的绿色软件tftpd32.exe
- C语言编程年龄的立方是个四位数,C 程序设计 功能:求一个四位数的各位数字的立方和。...
- NTP物理机时间同步应用
- 倍加福KFU8-UFC-1.D信号调节器