python怎么绘制渐变图_⽤Python绘制污染物玫瑰图
vba编程及应用基础林永兴♚
作者:沂⽔寒城,CSDN博客专家,个⼈研究⽅向:机器学习、深度学习、NLP、CV
污染物玫瑰图是⼀个⽐较领域化和专业化的名词,主要是在环保数据分析领域中较为经常使⽤到,如果⼀开始就来说污染物玫瑰图可能不是很好理解,这⾥拿⼀个⽐较通⽤的实例来说明,就是风向玫瑰图。
为了更好地说明⽩风向玫瑰图这个学术化的名词我从百度百科到了关于它的相关介绍,具体如下:php推荐书籍
风向玫瑰图(简称风玫瑰图)也叫风向频率玫瑰图,它是根据某⼀地区多年平均统计的各个风向和风速的百分数值,并按⼀定⽐例绘制,⼀般多⽤8个或16个罗盘⽅位表⽰,由于形状酷似玫瑰花朵⽽得名。玫瑰图上所表⽰风的吹向,是指从外部吹向地区中⼼的⽅向,各⽅向上按统计数值画出的线段,表⽰此⽅向风频率的⼤⼩,线段越长表⽰该风向出现的次数越多。将各个⽅向上表⽰风频的线段按风速数值百分⽐绘制成不同颜⾊的分线段,即表⽰出各风向的平均风速,此类统计图称为风频风速玫瑰图。接下来简单看⼏个玫瑰图的实例,具体如下所⽰:
借⽤echarts的极坐标堆叠柱状图也可以绘制出来类似的效果只不过暂时没有到如何对不同区间的浓度值设定不同的颜⾊的⽅法,简单的效果图如下所⽰:
在环保、⽓象等领域中,风向玫瑰图是⾮常常⽤的数据分析可视化⼿段,与此相关衍⽣出来的还有⼀种类似的玫瑰图——污染物玫瑰图,与风向玫瑰图相同的是,在具体计算逻辑以及整体形式上都是⽐较⼀致的,不同的是污染物玫瑰图主要是⽤于分析污染物溯源传播等相关的问题的,在可视化的时候叠加了污染物的浓度数据。
想要绘制污染物的玫瑰图⾸先我们需要获取到需要的因⼦浓度数据以及对应的⽓象数据,这⾥我们的数据来源于中央⽓象台以及中国环境监测总站,其中,前者提供了我们所需的⽓象数据,后者提供了我们所需的因⼦浓度监测数据。
中国环境检测总站⾸页数据区域截图如下:
点击详情即可查看,这部分数据的采集我发现⽹上有开源的实现就直接拿来⽤了,所以这⾥就不多做介绍了,如有需要可以留⾔,我给你提供项⽬链接,能够获取城市的实时空⽓数据,包括AQI、pm2.5、pm10、co、o3、no2、so2、⾸要污染物、⽣活建议、污染描述等数据。
中央⽓象台中数据区域截图如下所⽰:
这⾥我做了具体的实现,详细介绍请参考我的博客:
到这⾥,我们的数据获取⼯作差不多就结束了,接下来就我们就开始绘制污染物玫瑰图,其实污染物玫瑰图本质上来说就是使⽤所需分析的污染物的浓度替换了原有的风速数据,将污染物的传播和分布情况借助于⽓象的数据展⽰了出来,在很多应⽤场景⾥⾯污染物玫瑰图都是很有帮助,能够有效地定位污染位置等信息。
之前的⼯作⾥⾯我从事过相关的研究项⽬,对于⼀些常⽤的⼯具模块都已有了⽐较完整的实现,这⾥可以很⽅便地进⾏调⽤,下⾯是具体的Demo代码实现:
def plotPollutionRoseDemo(value,direction,title,save_path='demo.png'):
'''
污染物可视化Demo
'''
plt.clf
ax=WindroseAxes.from_ax
ax.bar(direction,value,normed=True,opening=0.8,edgecolor='white')
ax.set_legend(loc='best',bbox_to_anchor=(1.1, 1.1)) #loc='lower center',ncol=3
plt.title(title,chinese)
plt.savefig(save_path)
绘图的代码真的是很简单的,下⾯是具体的结果:
我觉得还是蛮好看的,当然如果需要放到产品⾥⾯的话可能还需要进⼀步去美化⼀下。
之前有⼀些博友留⾔需要⼀下绘图的参数设置,这⾥我⼀并给出来,如果需要的话可以直接拿去使⽤:
import matplotlib as mpl
emphasize巧记
english={'family':'Times New Roman','weight':'normal','size':12}
chinese={'family':'SimHei','weight':'normal','size':12}
color_list=['#CD853F','#DC143C','#00FF7F','#FF6347','#8B008B','#00FFFF','#0000FF','#8B0000','#FF8C00',
'#1E90FF','#00FF00','#FFD700','#008080','#008B8B','#8A2BE2','#228B22','#FA8072','#808080']
个⼈习惯,⽐较喜欢将⼀些参数项整合到字典⾥⾯封装其起来之后可以很⽅便地进⾏调⽤。
气象python零基础入门教程完成绘图模块的开发后,就可以开发API了,基于flask将本地的⼯具模块暴露成可以直接调⽤的API服务是⽐较常⽤的做法,这⾥的具体代
码实现如下:
#!usr/bin/env python
mybatis框架和hibernate# encoding:utf-8
import os
import sys
import time
import jsongrep 查
from flask import Flask
from flask import request
from flask import make_response
from flask import jsonify
from windRosePloter import *
app = Flask(__name__)
reload(sys)
sys.setdefaultencoding("utf-8")
@ute("/")def init:return u"风向玫瑰图模块正常启动!"@ute('/onlinerose',methods=['GET'])def windRoseFunc:'''风向玫瑰图可视化功能IP:port/onli 完成上述API的开发⼯作后就可以进⾏使⽤分析了,下⾯是简单的实例测试结果:
基于API实现⼯具⽅便的调⽤对于提升⼯作效率或者是辅助现场⼈员完成数据分析⼯作是很有帮助的。
很⾼兴在⾃⼰温习回顾知识的同时能写下点分享的东西出来,如果说您觉得我的内容还可以或者是对您有所启发、帮助,还希望得到您的⿎励⽀持!
回复下⽅「关键词」,获取优质资源
回复关键词「 pybook03」,⽴即获取主页君与⼩伙伴⼀起翻译的《Think Python 2e》电⼦版
回复关键词「⼊门资料」,⽴即获取主页君整理的 10 本 Python ⼊门书的电⼦版
回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~
题图:pexels,CC0 授权。