python气象绘图windrose

python气象绘图windrose,第1张

#导入包

import numpy as np

import pandas as pd

from matplotlib import pyplot as plt

from matplotlibticker import FuncFormatter

import matplotlib as mpl

mplrcParams['fontsans-serif'] = ['SimHei']  #设置简黑字体

mplrcParams['axesunicode_minus'] = False  #设置负号正常显示

#----获取数据DataFrames,indexcolumns。index表示不同值范围,columns表示十六个风向

data = pdDataFrame(wind_d_max_num_per,

                    index=['<15', '15~25', '25~35', '35~45',"≥45"],

                    columns='N NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW'split())

N = 16 # 风速分布为16个方向

theta = nplinspace(0, 2nppi, N, endpoint=False) # 获取16个方向的角度值

width = nppi / 4 04  # 绘制扇型的宽度,可以自行调整05时是360,充满,有间隔的话小于05即可

labels = list(datacolumns) # 自定义坐标标签为 N , NSN, ……# 开始绘图

pltfigure(figsize=(6,6),dpi=600)

ax = pltsubplot(111, projection='polar')

#----自定义颜色

mycolor =['cornflowerblue','orange','mediumseagreen','lightcoral','cyan']

#----循环画风玫瑰图

i=0

for idx in dataindex:

    print(idx)

    # 每一行绘制一个扇形

    radii = dataloc[idx] # 每一行数据

    if i == 0:

        axbar(theta, radii, width=width, bottom=00, label=idx, tick_label=labels,

          color=mycolor[i])

    else:

        axbar(theta, radii, width=width, bottom=npsum(dataloc[dataindex[0:i]]), label=idx, tick_label=labels,

          color=mycolor[i])

    i=i+1

#此种画法,注意bottom设置,第一个bottom为0,后续bottom需要在前一个基础上增加。

axset_xticks(theta)

axset_xticklabels(labels,fontdict={'weight':'bold','size':15,'color':'k'})

axset_theta_zero_location('N') #设置零度方向北

axset_theta_direction(-1)    # 逆时针方向绘图

#----设置y坐标轴以百分数显示

pltgca()yaxisset_major_formatter(FuncFormatter(lambda s, position: '{:0f}%'format(100s)))

pltlegend(loc=4, bbox_to_anchor=(005, -025),fontsize=12) # 将label显示出来, 并调整位置

#----保存

pltsavefig("/windrose1svg")

自哥本哈根气候会议之后,全球日益关注气候变化和温室效应等问题,并于会后建立了全球碳交易市场,分阶段分批次减碳。本实验获取了美国 1979 - 2011 年间 NASA 等机构对美国各地日均最高气温、降雨量等数据,研究及可视化了气候相关指标的变化规律及相互关系。

输入并执行魔法命令 %matplotlib inline, 并去除图例边框。

数据集介绍:

本数据集特征包括美国 49 个州(State),各州所在的地区(Region),统计年(Year),统计月(Month),平均光照(Avg Daily Sunlight),日均最大空气温度(Avg Daily Max Air Temperature ),日均最大热指数(Avg Daily Max Heat Index ),日均降雨量(Avg Daily Precipitation ),日均地表温度(Avg Day Land Surface Temperature)。

各特征的年度区间为:

导入数据并查看前 5 行。

筛选美国各大区域的主要气候指数,通过 snsdistplot 接口绘制指数的分布图。

从运行结果可知:

光照能量密度(Sunlight),美国全境各地区分布趋势大致相同,均存在较为明显的两个峰(强光照和弱光照)。这是因为非赤道国家受地球公转影响,四季光照强度会呈现出一定的周期变化规律;

从地理区位能看出,东北部光照低谷明显低于其他三个区域;

日均最高空气温度(Max Air Temperature),美国全境各地区表现出较大差异,东北部和中西部趋势大致相同,气温平缓期较长,且包含一个显著的尖峰;西部地区平缓期最长,全年最高温均相对稳定;南部分布则相对更为集中;

日均地表温度(Land Surface Temperature),与最高空气温度类似,不同之处在于其低温区分布更少;

最大热指数(Max Heat Index),西部与中西部分布较为一致,偏温和性温度,东北部热指数偏高,南部偏低;

降雨量(Precipitation),西部明显偏小,南部与东北部大致相同,中西部相对较多。

结合地理知识做一个总结:

东北部及大多数中西部地区,属于温带大陆性气候,四季分明,夏季闷热,降雨较多。

西部属于温带地中海气候,全年气候温和,并且干燥少雨,夏季气候温和,最高温度相对稳定。

南部沿海一带,终年气候温暖,夏季炎热,雨水充沛。

按月计算美国各地区降雨量均值及标准偏差,以均值 ± 一倍标准偏差绘制各地区降雨量误差线图。

从运行结果可知:

在大多数夏季月份,西部地区降雨量远小于其他地区;

西部地区冬季月降雨量高于夏季月;

中西部地区是较为典型的温带大陆性气候,秋冬降雨逐渐减少,春夏降雨逐渐升高;

南部地区偏向海洋性气候,全年降雨量相对平均。

需要安装joypy包。

日均最高气温变化趋势

通过 joypy 包的 joyplot 接口,可以绘制带堆积效应的直方分布曲线,将 1980 年 - 2008 年的日均最高温度按每隔 4 年的方式绘制其分布图,并标注 25%、75% 分位数。

从运行结果可知:

1980 - 2008 年区间,美国全境日均最高温度分布的低温区正逐渐升高,同时高温区正逐渐降低,分布更趋向于集中;

1980 - 2008 年区间,美国全境日均最高温度的 25% 分位数和 75% 分位数有少量偏离但并不明显。

日均降雨量变化趋势

同样的方式对降雨量数据进行处理并查看输出结果。

筛选出加州和纽约州的日均降雨量数据,通过 plthist 接口绘制降雨量各月的分布图。

从运行结果可知:

加州地区降雨量多集中在 0 - 1 mm 区间,很少出现大雨,相比而言,纽约州则显得雨量充沛,日均降雨量分布在 2 - 4 mm 区间。

直方图在堆积效应下会被覆盖大多数细节,同时表达聚合、离散效应的箱线图在此类问题上或许是更好的选择。

通过 snsboxplot 接口绘制加州和纽约州全年各月降雨量分布箱线图

从箱线图上,我们可以清晰地对比每个月两个州的降雨量分布,既可以看到集中程度,例如七月的加州降雨量集中在 01 - 05 mm 的窄区间,说明此时很少会有大雨;又可以看到离散情况,例如一月的加州,箱线图箱子(box)部分分布较宽,且上方 10 mm 左右存在一个离散点,说明此时的加州可能偶尔地会出现大到暴雨。

视觉上更为美观且简约的是摆动的误差线图,实验 「美国全境降雨量月度分布」 将所有类别标签的 x 位置均放于同一处,导致误差线高度重合。可通过调节 x 坐标位置将需要对比的序列紧凑排布。

从输出结果可以看出,加州冬季的降雨量不确定更强,每年的的十一月至次年的三月,存在降雨量大,且降雨量存在忽多忽少的现象(误差线长)。

上面的实验均在研究单变量的分布,但经常性地,我们希望知道任意两个变量的联合分布有怎样的特征。

核密度估计 , 是研究此类问题的主要方式之一, snskdeplot 接口通过高斯核函数计算两变量的核密度函数并以等高线的形式绘制核密度。

从运行结果可知:

加州在高温区和低降雨期存在一个较为明显的高密度分布区(高温少雨的夏季);

纽约州在高温及低温区均存在一个高密度的分布区,且在不同温区降雨量分布都较为均匀。

将美国全境的降雨量与空气温度通过 plthist2d 接口可视化。

从运行结果可知:

美国全境最高密度的日均高温温度区域和降雨量区间分别为,78 F (约等于 25 C)和 22 mm 左右,属于相对舒适的生活气候区间。

美国全境降雨量与空气温度的关系-核密度估计

在上面实验基础上,在 x, y 轴上分别通过 snsrugplot 接口绘制核密度估计的一维分布图,可在一张绘图平面上同时获取联合分布和单变量分布的特征。

美国全境降雨量与空气温度的关系-散点分布和直方分布

snsjointplot 接口通过栅格的形式,将单变量分布用子图的形式进行分别绘制,同时通过散点图进行双变量关系的展示,也是一种较好的展现数据分布的方式。

上面两个实验研究了双变量分布的可视化,以下研究 3 变量聚合结果的可视化。

通过 snsheatmap 接口可实现对透视数据的可视化,其原理是对透视结果的值赋予不同的颜色块,以可视化其值的大小,并通过颜色条工具量化其值大小。

上面的两个实验可视化了各州随年份日均最高温度的中位数变化趋势,从图中并未看出有较为显著地变化。

以下通过 t 检验的方式查看统计量是否有显著性差异。statsttest_ind 接口可以输出 1980 年 与 2010 年主要气候指数的显著性检验统计量及 p 值。

从运行结果可以看出:

检验结果拒绝了降雨量相等的原假设,即 1980 年 与 2010 年两年间,美国降雨量是不同的,同时没有拒绝日均日照、日均最大气温两个变量相等的原假设,说明气温未发生显著性变化。

pyeemd 最近emd或者eemd的在气候中的应用也比较多,论坛里一般分享的最多的就是“官方”的matlab版本,这里我分享一个python的,网址在此 pyeemd。这个安装相对比较复杂一点(其实也没复杂到哪儿去)。

使用pyeemd需要libeemd,这是一个c语言写的库(编译时需要gsl库),下载后经过常规编译之后生成一个静态库libeemda,一个动态库libeemdso,和相应头文件 eemdh,一般指定静态库 a(LIBRARY_PATH)或者动态库 so(LD_LIBRARY_PATH)的位置就可以 。用C 直接用eemd这个库也可以,速度上比matlab版本是有提升的。

抓取温度云图数据需要先找到数据源,通常可以通过以下几种方式来获取:

使用API:有些网站提供API接口,可以通过编写Python代码来获取数据。例如,National Oceanic and Atmospheric Administration (NOAA)提供了RESTful API,可以用来获取气象数据,包括温度云图数据。

网络爬虫:通过编写Python爬虫程序,可以从网站上抓取温度云图数据。这种方式需要注意遵守网站的使用协议,不要违反网站规定。

以下是使用API的方法:

首先,需要注册NOAA的API账号,获取API密钥。

编写Python代码,使用requests库向API发送请求,并解析响应数据。以下是一个简单的示例代码:

import requests

import json

# 设置API请求参数

params = {

'product': 'sst',

'sensor': 'ghrsst',

'date': '2022-03-01',

'bbox': '-180,-90,180,90',

'format': 'json',

'access_token': 'your_access_token'

}

# 发送API请求

response = requestsget('>

# 解析响应数据

data = jsonloads(responsetext)

# 获取温度云图数据

temp_cloud_data = data['temperature_cloud']

注意:以上示例代码中,需要将your_access_token替换为你自己的API密钥。

3对获取到的温度云图数据进行处理和分析,然后将其可视化。

以上是一个简单的方法来获取温度云图数据,具体的实现方式可能因数据源不同而有所不同。在实际应用中,还需要考虑数据的格式、精度、更新频率等因素,以确保数据的准确性和可靠性。

泰勒图绘制的核心思想是设计一个只有第一象限的极坐标,并将方差,相关系数进行捆绑,通过转化为极坐标系坐标进行绘制。为了实现泰勒图的绘制,我设计了两个函数:

set_tayloraxes(fig, location=111) 和plot_taylor(axes, refsample, sample, args, kwargs)

set_tayloraxes()函数用于建立一个泰勒图的坐标系,这个自定义函数一般情况下不建议修改,每一个参数都是经过多次调试得到的,很可能牵一发动全身。因此,将绘图部分的独立成为了plot_taylor函数(),这部分函数较为简单,目的就是将需要绘图的数据,转换为极坐标系坐标,通过plot函数将散点打在泰勒图上,这个函数模块较为简单,可以根据自己的输入数据情况进行调整。

下面介绍下函数的具体用法:

输入:

fig: 需要绘图的figure

rect:图的位置,如111为1行1列第一个,122为1行2列第2个

输出:

polar_ax:泰勒坐标系

输入:

axes : setup_axes返回的泰勒坐标系

refsample :参照样本

sample :评估样本

args, kwargs :pltplot()函数的相关参数,设置点的颜色,形状等等。

下面给出示例:

以上就是关于python气象绘图windrose全部的内容,包括:python气象绘图windrose、114 11 个案例掌握 Python 数据可视化--美国气候研究、介绍气候研究中几个常用Python包给大家等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9853427.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存