python 实现对于一组数据,分为几个bin,每个bin一种颜色,绘制空间分布图

简介: python 实现对于一组数据,分为几个bin,每个bin一种颜色,绘制空间分布图

首先,码上希望实现的成果样式:


4b4c555b4b4e42a8b98844b6c7027464.png


这里,我处理的数据是平流强度数据,具体的实现思路是:

1、将数据分为5个bin

2、找出每个数据点对应的经纬度坐标

3、对每组数据进行循环画图,每次画图采用不同的颜色


这里主要需要用到几个库,以及函数

1、读取nc文件的xarray库

2、实现绘图的 matplotlib库

3、实现地形投影的cartopy库

4、实现数组计算的numpy库

5、np.argwhere()函数:获取数组中数据对应的索引值


可以查看官网说明:np.argwhere()


下面贴上代码以及每一步的说明:


#导入相关的库
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import numpy as np
import xarray as xr
#读取数据
path='D:\\mse.nc'#数据的路径位置
dh=xr.open_dataset(path)#读取数据
lon=np.array(dh['lon'])#读取数据中的经度并转为array数组
lat=np.array(dh['lat'])#读取数据中的纬度并转为array数组
time=dh['time']#读取数据中的时间
time=time.loc['1982':'2012'][:]#选择数据的时间范围
lat_range = lat[(lat>-22.5) & (lat<22.5)]#选择数据的纬度范围
hadv_region =dh.sel(lon=lon, lat=lat_range,time=time).hadv#读取选取时间、经度范围内的数据
hadv =np.array(hadv_region.mean('time', skipna=True))#对数据进行平均处理
hadv_range=np.arange(-125,125+50,50)#随机生成一组数值用于筛选数据
hadv_bin=[]#生成一个空的list
fig=plt.figure(figsize=(20,12))#产生画板
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.rcParams['font.sans-serif']=['Fangsong']#显示中文
ax=fig.add_subplot(111,projection=ccrs.PlateCarree(central_longitude=180))#设置投影以及投影的中心经度,创建一个画纸,创建子图
colors=['r','b','y','g','k']#定义五个bin的颜色
lab=['-100 MSE','-50 MSE','0 MSE','50 MSE','100 MSE']#定义五个bin的标签
# 循环挑选不同的bin ,每50为一个bin,并绘制散点图
for i in range(len(hadv_range)-1):
    idx=np.argwhere((hadv>hadv_range[i])&(hadv<hadv_range[i+1]))
    lonr=lon[idx[:,1]]
    latr=lat_range[idx[:,0]]
    ax.scatter(lonr,latr,marker='o',c=colors[i],\
            transform=ccrs.PlateCarree(central_longitude=180),label=lab[i])#绘制散点图
ax.legend(loc='upper right', bbox_to_anchor=(1, 1.7))#设置图例以及位置
ax.coastlines()#添加海岸线
ax.set_xticks(np.arange(0, 360+45, 45),crs=ccrs.PlateCarree(central_longitude=180))#设置x轴的经度范围
ax.set_yticks(np.arange(-20, 30, 10),crs=ccrs.PlateCarree())#设置y轴的纬度范围
#设置刻度格式为经纬度格式
ax.xaxis.set_major_formatter(LongitudeFormatter())#设置刻度格式
ax.yaxis.set_major_formatter(LatitudeFormatter())
ax.set_title('热带海域 MSE 空间水平分布图',fontsize=20)#添加标题
ax.set_xlabel('经度($°$)',fontsize=20)#添加x轴标签
ax.set_ylabel('纬度($°$)',fontsize=20)#添加y轴标签
ax.add_feature(cfeature.NaturalEarthFeature('physical', 'land', '50m', \
                                            edgecolor='black', facecolor='grey'))#添加陆地
# fig.savefig('D:\\picture\\'+'热带海域 MSE 空间水平分布图.tiff',format='tiff',dpi=150)#保存数据


结果如下,非常的surprise~,感兴趣的小伙伴赶快尝试吧


cdbaacaa1cd64c078522ec75be5f2b83.png


          一个努力学习python的海洋小白
                    水平有限,欢迎指正!!!
                    欢迎评论、收藏。


相关文章
|
10天前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
75 1
|
8天前
|
机器学习/深度学习 算法 数据挖掘
6种有效的时间序列数据特征工程技术(使用Python)
在本文中,我们将探讨使用日期时间列提取有用信息的各种特征工程技术。
33 0
|
9天前
|
算法 Python
Python 中的数据抽象
【8月更文挑战第29天】
22 11
|
7天前
|
数据采集 JavaScript 前端开发
构建简易Python爬虫:抓取网页数据入门指南
【8月更文挑战第31天】在数字信息的时代,数据抓取成为获取网络资源的重要手段。本文将引导你通过Python编写一个简单的网页爬虫,从零基础到实现数据抓取的全过程。我们将一起探索如何利用Python的requests库进行网络请求,使用BeautifulSoup库解析HTML文档,并最终提取出有价值的数据。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你打开数据抓取的大门。
|
9天前
|
JSON 数据格式 Python
Python快速获取国内最新放假安排数据
Python快速获取国内最新放假安排数据
|
9天前
|
存储 数据可视化 Python
使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
9 0
|
10天前
|
索引 Python
python pandas 把数据保存成csv文件,以及读取csv文件获取指定行、指定列数据
该文档详细介绍了如何使用Python的Pandas库处理图像数据集,并将其保存为CSV文件。示例数据集位于`test_data`目录中,包含5张PNG图片,每张图片名中的数字代表其标签。文档提供了将这些数据转换为CSV格式的具体步骤,包括不同格式的数据输入方法(如NumPy数组、嵌套列表、嵌套元组和字典),以及如何使用`pd.DataFrame`和`to_csv`方法保存数据。此外,还展示了如何读取CSV文件并访问其中的每一行和每一列数据,包括获取列名、指定列数据及行数据的操作方法。
19 1
|
5天前
|
存储 消息中间件 大数据
Python里for循环要遍历的数据很多很大怎么办?
遇到大数据量问题时,重要的是确定最优解决方案,这取决于数据的来源、性质以及所需的处理方式。分析数据传输、存储与处理的瓶颈是提升性能的关键。通过结合上述的技巧和方法,可以在内存和性能方面找到合适的平衡点来处理大规模数据集。
14 0
|
7天前
|
数据采集 存储 数据库
Python中实现简单爬虫与数据解析
【8月更文挑战第31天】在数字化时代的浪潮中,数据成为了新的石油。本文将带领读者通过Python编程语言,从零开始构建一个简单的网络爬虫,并展示如何对爬取的数据进行解析和处理。我们将一起探索请求网站、解析HTML以及存储数据的基础知识,让每个人都能成为自己数据故事的讲述者。
|
7天前
|
Python
Python魔法:用一行代码实现数据排序
【8月更文挑战第31天】忘掉传统多行排序代码,本文揭秘如何使用一行Python代码快速对数据进行排序,同时深入探讨背后的原理和性能考量。
下一篇
DDNS