python读取nc数据并绘图的方法实例
作者:细细47 发布时间:2023-09-16 10:08:19
标签:python,nc文件,绘图
获取nc数据的相关信息
from netCDF4 import Dataset
import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
path = "F:\\OCO2.SIF.all.daily.2001.nc"
csv_path = "F:\\test.csv"
dst = Dataset(path, mode='r', format="netCDF4")
print(dst.variables.keys())
data = dst.variables['all_daily_sif'][:]
print(data.shape)
# 输出结果如下:
# dict_keys(['lat', 'lon', 'doy', 'all_daily_sif'])
# (92, 360, 720)
#可见有92个时间序列,经度(lon)、纬度(lat)的取值有720,360个
# # 查看数据经纬度范围,经度-179.75~179.75,其中负值为西经,正值为东经;纬度正为北纬,负为南纬
# # 格点分辨率为0.5度
long = dst.variables['lon'][:]
lati = dst.variables['lat'][:]
print(long[0], long[-1], lati[0], lati[-1])
print(long.shape, lati.shape)
绘图
用matplotlib绘图
参考文献1
# plt对某个doy的全球sif值作图。左半部分为西半球,右边是东半球
# 选了doy为10的sif数据作图
plt.contourf(long, lati, data[10, :, :] )
plt.colorbar(label="Sif", orientation="horizontal")
plt.show()
运行结果:
用Basemap绘图
参考文献2
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
lat = dst.variables['lat'][:]
lon = dst.variables['lon'][:]
data = dst.variables['all_daily_sif'][:]
data[10] = data[10]
# use .shape function to check that arrays have
# the correct size.
# e.g. lon.shape
print(data[10].shape)
lon0 = lon.mean()
lat0 = lat.mean()
# 设置投影方式:cyl为圆柱投影、还可设置merc为mercator投影 llcrnrlat为起始lat;urcrnrlat为终止lat
# m = Basemap(projection='merc', llcrnrlat=lat[0], urcrnrlat=lat[-1], \
# llcrnrlon=lon[0], urcrnrlon=lon[-1], ax=ax1)
# 参数 "resolution" 用于控制地图面积边缘的精细程度,有'l'和'h'两种取值
m = Basemap(lat_0=lat0, lon_0=lon0,projection='cyl',resolution='l')
# 绘制等经纬度线 纬度每隔20度画一条线,且标注经纬度
m.drawparallels(np.arange(-90., 91., 20.), labels=[1, 0, 0, 0], fontsize=10)
m.drawmeridians(np.arange(-180., 181., 40.), labels=[0, 0, 0, 1], fontsize=10)
m.drawcoastlines()# 绘制海岸线
# m.drawcountries(linewidth=0.25) # 绘制国界线
# m.readshapefile('F:\E\data\grass_yield\shp\quhua\\省', 'states') # 读取中国各省边界,并绘图
lon, lat = np.meshgrid(lon, lat)
xi, yi = m(lon, lat)
# cmap是颜色,还可选‘jet'、‘spring'、‘winter'、'summer'、'autumn'
cs = m.contourf(xi, yi, data[10], cmap='summer')
# pad指位置,
cbar = m.colorbar(cs, location='bottom', pad="10%",format='%.1f')
# cbar = m.colorbar(C, 'right', ticks=np.arange(-128, 128, 40), format='%.1f')
font1 = {'family': 'DejaVu Sans', 'weight': 'normal', 'size': 16}
plt.title('CSIF', font1)
plt.show()
运行效果:
用Cartopy绘图
参考文献3
此前 Python 最常用的地图包是 Basemap,然而它将于 2020 年被弃用,官方推荐使用 Cartopy 包作为替代。Cartopy 是英国气象局开发的地图绘图包,实现了 Basemap 的大部分功能,还可以通过 Matplotlib 的 API 实现丰富的自定义效果。
安装Cartopy包
下载安装OSGeo4W4
参考文献:https://zhuanlan.zhihu.com/p/129351199
参考文献:https://blog.csdn.net/weixin_39618339的plt画图像图例的位置怎么写代码_用basemap画气象图
参考文献: https://zhajiman.github.io/
https://trac.osgeo.org/osgeo4w/
来源:https://blog.csdn.net/suexisang/article/details/122768900


猜你喜欢
- 1. 拉取推送分支: git branch 分
- 从信息组织角度来看,段落内行之间的关系要比段落之间的关系低一个级别,所以在呈现上段落之间的“段距”应该大于段落之内的“行距”,如此才能一目了
- 一、简介Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包
- settings文件中配置:LOGGING = { 'version':1, 'disabl
- Python中numpy数组的合并有很多方法,如- np.append() - np.concatenate() - np.stack()
- 最近我遇到了一个 bug,我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一个 UTF-8 字符串,然后出现了一个离奇
- 生成器是迭代器,同时也并不仅仅是迭代器,不过迭代器之外的用途实在是不多,所以我们可以大声地说:生成器提供了非常方便的自定义迭代器的途径。这是
- 1.在OpenCV中我们经常会遇到一个名字:Mask(掩膜)。很多函数都使用到它,那么这个Mask到底什么呢?2.如果我们想要裁剪图像中任意
- 用过软件的朋友都知道,进度条是一个优秀软件的重要组成部分。它的存在能够使用户及时掌握程序的运行进度,确认应用程序正常工作。可是ASP中似乎没
- MySQL的ODBC接口实现是通过安装MyODBC驱动,这个驱动程序是跨平台的。如果在Linux等Unix体系操作系统下使用,需要先安装Io
- 1、目录操作1.1、获取当前目录# coding:utf-8import os# 获取当前工作目录(绝对路径)print(os.getcwd
- 桑基图简介很多时候,我们需要一种必须可视化数据如何在实体之间流动的情况。例如,以居民如何从一个国家迁移到另一个国家为例。这里演示了有多少居民
- 在数据分析中经常需要从csv格式的文件中存取数据以及将数据写书到csv文件中。将csv文件中的数据直接读取为 dict 类型和 DataFr
- 我就废话不多说了,大家还是直接看操作吧~<p>联系电话:<a :href="'tel:' + i
- 最近用python写了个小说程序的api,想着用 vue 做个系统管理数据,脑子里出现的是这个画面: 但是这种样式的管理后台已经做
- //我修改之,能正常运行,测试环境为mysql5.0,xp //关键是设置对字符集,设置gbk,gb2312测试通过,utf8测试未通过 /
- 我就废话不多说,直接上代码吧!#Copyright (c)2017, 东北大学软件学院学生# All rightsreserved#文件名称
- 如果我们需要修改sql server表结构,应该怎么做呢?下面就将教您如何修改sql server表结构的方法,希望对您学习sql serv
- 第一步.开启mysql慢查询方式一:修改配置文件Windows:Windows 的配置文件为 my.ini,一般在 MySQL 的安装目录下
- 如果直接从生成验证码的页面把验证码下载到本地后识别,再构造表单数据发送的话,会有一个验证码同步的问题,即请求了两次验证码,而识别出来的验证码