文章目录

  • 获取数据
  • 处理数据
  • 生成网格数据
  • 绘制污染玫瑰图

整体的思路是使用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

处理数据

  1. 将风向数据转化为弧度数据
data['风向(deg)'] = np.radians(data['风向(deg)'])
  1. 处理风速风向分类的单位
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

绘制污染玫瑰图

  1. meshgrid()将网格数据生成绘制数据
theta, r = np.meshgrid(deg, speed)
  1. 使用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绘制污染玫瑰图相关推荐

  1. python绘制风向玫瑰图

    一.风向.流向角度和数学角关系. 1.数学角和风向角相互转换. 数学角向东为0°,按照逆时针旋转. 北风为0°,即指向南为0°,顺时针增加 数学角转风向角: (1)根据u,v获得数学角: (2)根据数 ...

  2. python画动图-Python绘制动态水球图过程详解

    先来看看绘制的动态水球图: 没有安装PyEcharts的,先安装PyEcharts: # 安装pyecharts模块,直接安装就是最新的版本pip install pyecharts 安装好PyEch ...

  3. python画折线图显示点值-Python 绘制可视化折线图

    1. 用 Numpy ndarray 作为数据传入 ply import numpy as np import matplotlib as mpl import matplotlib.pyplot a ...

  4. python画折线图代码-python绘制简单折线图代码示例

    1.画最简单的直线图 代码如下: import numpy as np import matplotlib.pyplot as plt x=[0,1] y=[0,1] plt.figure() plt ...

  5. python绘制雷达图代码实例-使用python绘制温度变化雷达图

    本文实例为大家分享了python绘制温度变化雷达图的具体代码,供大家参考,具体内容如下 假设某天某地每三个小时取样的气温为 针对温度变化趋势绘制雷达图: 代码如下: import numpy as n ...

  6. python画折线图详解-python绘制简单折线图代码示例

    1.画最简单的直线图 代码如下: import numpy as np import matplotlib.pyplot as plt x=[0,1] y=[0,1] plt.figure() plt ...

  7. python台风动图绘制_使用Python绘制台风轨迹图的示例代码

    参考: 使用CMA热带气旋最佳路径数据集,对我国周边的台风进行绘制 import re import os import numpy as np import matplotlib.pyplot as ...

  8. python画折线图代码实现_python如何绘制分布折线图 python绘制分布折线图代码示例...

    python如何绘制分布折线图?本篇文章小编给大家分享一下python绘制分布折线图代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 用Pyth ...

  9. python能画k线图吗_,求教使用python绘制K线图

    如何用python实现视频关键帧提取并保存为图片 import cv2 vc = cv2.VideoCapture('Test.avi') #读入视频文件 c=1 if vc.isOpened(): ...

  10. python画简单图-python绘制简单彩虹图

    本文实例为大家分享了python绘制彩虹图的具体代码,供大家参考,具体内容如下 代码: from turtle import * #控制彩虹路径 def path(pen, r, g, b): pen ...

最新文章

  1. boost::smart_ptr模块boost/pointer_to_other.hpp 的测试
  2. spring +springmvc+mybatis组合springmvc.xml文件配置
  3. 【第一部分】01Leetcode刷题
  4. mysql bin 分析_mysql bin log 分析
  5. Git VsCode 一步一步把本地目录放到git仓库
  6. 【Arduino】颜色识别的智能搬运机器人设计
  7. matlab输出工作区,matlab保存工作区数据
  8. Excel批量自动填充行号
  9. 20190905层析分析法matlab,未通过一致性检验时,重新构造判断矩阵再计算
  10. VS2013使用技巧汇总
  11. Nitro League 出品 | P2E 系列 101——第三部分
  12. uni-ui简单入门教程 - 如何用HBuilderX为uni-app项目启用uni-ui扩展组件?
  13. 高德3D动态地图—旋转视角
  14. 详解Https出现的前因后果
  15. 计算机辅助英语教学 教材,英语教学课中计算机辅助
  16. 给网站戴上「安全套」
  17. 【软件推荐】集tftp client、Server、syslog功能于一体的绿色软件tftpd32.exe
  18. C语言编程年龄的立方是个四位数,C 程序设计 功能:求一个四位数的各位数字的立方和。...
  19. NTP物理机时间同步应用
  20. 倍加福KFU8-UFC-1.D信号调节器

热门文章

  1. 华泰证券人工智能系列(1):人工智能选股框架及经典算法简介
  2. 嵌入式系统笔记之声音
  3. OFDM子载波频率 知乎_频谱中射频干扰信号流化、分析与回放
  4. 【论文笔记】使用物理原理和领域知识进行无标注的监督学习
  5. 2022-2027年中国SPA水疗行业市场调研及未来发展趋势预测报告
  6. Overfeat 笔记
  7. 宏定义的大括号以及斜杠
  8. mp4格式的视频流传输下实现边下边播
  9. Android IPC —— AIDL的原理
  10. 白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖