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的海洋小白
                    水平有限,欢迎指正!!!
                    欢迎评论、收藏。


相关文章
|
9天前
|
Python
空间管理大师已上线!(2),Python高级工程师进阶学习】
空间管理大师已上线!(2),Python高级工程师进阶学习】
|
7天前
|
数据采集 数据可视化 Python
Python分析香港26281套在售二手房数据
Python分析香港26281套在售二手房数据
|
8天前
|
机器学习/深度学习 数据处理 Python
如何利用Python实现高效的数据清理与预处理
数据清理和预处理是数据科学家和分析师工作中不可或缺的一环,而Python作为一门强大的编程语言,可以使这个过程变得更加高效和便捷。本文将介绍一些常见的数据清理和预处理技术,并演示如何使用Python来实现这些技术。
|
12天前
|
存储 JSON 数据库
Python中列表数据的保存与读取:以txt文件为例
Python中列表数据的保存与读取:以txt文件为例
26 2
|
6天前
|
数据采集 Python SQL
2024年校花转学到我们班,于是我用Python把她空间给爬了个遍!(1),binder机制面试题
2024年校花转学到我们班,于是我用Python把她空间给爬了个遍!(1),binder机制面试题
2024年校花转学到我们班,于是我用Python把她空间给爬了个遍!(1),binder机制面试题
|
7天前
|
数据采集 存储 数据挖掘
Python DataFrame初学者指南:轻松上手构建数据表格
【5月更文挑战第19天】本文是针对初学者的Pandas DataFrame指南,介绍如何安装Pandas、创建DataFrame(从字典或CSV文件)、查看数据(`head()`, `info()`, `describe()`)、选择与操作数据(列、行、缺失值处理、数据类型转换、排序、分组聚合)以及保存DataFrame到CSV文件。通过学习这些基础,你将能轻松开始数据科学之旅。
|
7天前
|
数据挖掘 数据处理 Python
【Python DataFrame 专栏】Python DataFrame 入门指南:从零开始构建数据表格
【5月更文挑战第19天】本文介绍了Python数据分析中的核心概念——DataFrame,通过导入`pandas`库创建并操作DataFrame。示例展示了如何构建数据字典并转换为DataFrame,以及进行数据选择、添加修改列、计算统计量、筛选和排序等操作。DataFrame适用于处理各种规模的表格数据,是数据分析的得力工具。掌握其基础和应用是数据分析之旅的重要起点。
【Python DataFrame 专栏】Python DataFrame 入门指南:从零开始构建数据表格
|
10天前
|
JSON JavaScript 数据格式
利用 python 分析基金,合理分析数据让赚钱赢在起跑线!(1)
利用 python 分析基金,合理分析数据让赚钱赢在起跑线!(1)
|
11天前
|
存储 JSON 数据格式
Python知识点——高维数据的格式化
Python知识点——高维数据的格式化
10 0
|
11天前
|
Python
Python知识点——文件和数据格式化
Python知识点——文件和数据格式化
14 0