Python读取数据画图(用python读取图像)

http://www.itjxue.com  2023-03-25 10:20  来源:未知  点击次数: 

Python气象数据处理与绘图(12):轨迹(台风路径,寒潮路径,水汽轨迹)绘制

寒潮是笔者主要的研究方向,寒潮路径作为寒潮重要的特征,是寒潮预报的重点之一,同样的道理也适用在台风研究以及降水的水汽来源研究中。关于路径的计算以及获取方法(比如轨迹倒推,模型追踪等等方法,台风有自己现成的数据集,比如ibtracs数据集等等)并不在本文的介绍范围之内,本文主要介绍在获取了相应的路径坐标后,如何在图中美观的展现。

上图展现了近40年东北亚区域的冬季冷空气活动路径,绘制这类图需要的数据只需为每条路径的N个三维坐标点,第一第二维分别为longitude和latitudee,第三维则比较随意,根据需要选择,比如说需要体现高度,那就用高度坐标,需要体现冷空气强度,那就用温度数据,水汽可以用相对湿度,台风也可以用速度等等。

通常此类数据是由.txt(.csv)等格式存储的,读取和处理方法可参考我的“Python气象数据处理与绘图(1):数据读取”,本文主要介绍绘图部分。

当然根据需要,也可以直接绘制两维的轨迹,即取消掉颜色数组,用最简单的plot语句,循环绘制即可。

有一个陷阱需要大家注意的是,当轨迹跨越了东西半球时,即穿越了0°或者360°经线时,它的连接方式是反向绕一圈,比如下图所示,你想要蓝色的轨迹,然而很有可能得到绿色的,这是因为你的网格数组的边界是断点,系统不会自动识别最短路径,只会在数组中直接想连,因为这不是循环数组。

我目前的解决办法是这样的:如果你的数据是0°-360°格式,那么变为-180°-180°的格式,反之相互转换。但是如果你的数据两种都出现了断点,也就是绕了地球一圈多,那无论怎样都么得办法了,我目前的思路是将数据转换成极坐标数据格式,理论上是可行的,CARTOPY的绘图也是支持极坐标数据的,具体实施还需要再试试。

Python Matplotlib画图

主要用于作图、可视化问题

pip install matplotlib

导入模块 pyplot 和 pylab ,可以参考下面链接观察两者区别:

(说白了就是pylay=pyplot+numpy)

输入这三行解决

主要使用 plot() 来展示,里面前两个参数代表 x , y 坐标(注意x,y数量要一样),第三个参数可以用来设置散点图( 'o' )或者颜色、线条形式等各种样式,并且第三个参数可以同时传入多个,比如要红色的散点图就: '0r'

(1)颜色样式:

(2)线条样式:

(3)点的样式:

(4)坐标区间:

或者分别设置x、y的区间:

注:

设置点的样式时默认就是散点图,以及同类样式只能设置一个(比如不能设置两种颜色),并且还可以把多个图集合在一起展示,那就多 plot 几个,plot就相当于一个画布,每plot一个就相当于在上面画一张图,再弄就继续在上面画

主要用 hist() 来显示,实现方式很简单,把一组数据放入括号里就行了,例如随机生成一堆正态分布的数,然后直方图显示:

其中如果要设置直方图格式(宽度、上下限、是否要轮廓)可以这样:

注:

直方图和折线图这些不太一样,折线图是传入两个等长数据,然后每个x、y坐标一一对应展示出来。而直方图是:第一个参数代表你传入的所有数据,第二个参数代表你传入的x轴范围,然后直方图会将第一个参数里传入的数据一个个计算在某个范围内含有的数据量,因此传入的两个参数数据不一定要等长,例如下面的例子:

结果如图:

可以看出数据被自动分配到对应的范围内上了

使用 subplot(row, col, area) :三个参数分别是行数、列数和区域,比如要将原图分成2行2列(切成4份),然后要左下角那个图就:

如果想4个图都显示就4个 subplot ,分别1、2、3、4就行了,然后在各图的subplot之后写的都是每个图的内容,现在我们试试弄一个2行,第一行两列的图片(想象下鼠标的样子),而且分别是不同的内容:

注:

labels 、 sizes 、 colors 和 explode 的长度都要一样

1.导入3D图相关模块:

2.将画图板加到3D模块里,然后加入数据即可:

3D散点图举例:

通过 imread() 读取,举例:

Python气象数据处理与绘图(1):数据读取

python很多库支持了对nc格式文件的读取,比如NetCDF4,PyNio(PyNio和PyNgl可以看做是NCL的Python版本)以及Xarray等等。

我最初使用PyNio,但是由于NCL到Python的移植并不完全,导致目前远不如直接使用NCL方便,而在接触Xarray库后,发现其功能强大远超NCL(也可能是我NCL太菜的原因)。

安装同其它库一致:

我这里以一套中国逐日最高温度格点资料(CN05.1)为例,其水平精度为0.5°X0.5°。

可以看到,文件的坐标有时间, 经度,纬度,变量有日最高温

我们将最高温数据取出

这与Linux系统中的ncl_filedump指令看到的信息是类似的

Xarray在读取坐标信息时,自动将时间坐标读取为了datetime64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。

比如我们想选取1979.06.01-1979.06.20时期数据,我们只需

再比如我们想选取夏季数据时,只需

更多的时间操作同python的datetime函数类似。

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。

在这里,我选取了40°N-55°N,115°E-135°E范围的数据

甚至,我们还可以套娃,同时叠加时间和范围的选取

这足够满足常用到的数据索引要求。

对于这类简单排列的.txt文件,可以通过np.load读取,用pandas的.read_csv更为方便

读取txt的同时,对每列赋予了一个列名,通过data.a可以直接按列名调用相应数据。

对于较复杂的.txt文件,仍可通过该函数读取

skiprows=5跳过了前5行的文件头,sep='\s+'定义了数据间隔为空格,这里用的是正则表达。

pd.read_csv函数有很多的参数,可以处理各种复杂情况下的文本文件读取。

grib文件可通过pygrib库读取

import pygrib

f = pygrib.open('xxx.grb')

(责任编辑:IT教学网)

更多

推荐DNS服务器文章