python去除sst季节性空间分布图中,0°经线处出现的白线

简介: 近日,在处理sst月均数据时,绘制出季节性的空间分布图时,发现:绘出的图像在0°出现一条白线,经过查询将问题已经解决。

近日,在处理sst月均数据时,绘制出季节性的空间分布图时,发现:绘出的图像在0°出现一条白线,经过查询将问题已经解决。


图像问题如下:


20210718214103419.png

其中,需要使用到cartopy.util模块下的add_cyclic_point函数。

该函数**add_cyclic_point(data,coord)**包含两个关键参数。data表示需要参与循环的数据,我这里就是sst。coord表示需要参与循环的维度,因为是经度方向出了问题,所以这里选择的就是经度。

官方说明在这

大致使用思路如下:


from cartopy.util import add_cyclic_point
cycle_sst, cycle_lon = add_cyclic_point(sst, coord=lon)
cycle_LON, cycle_LAT = np.meshgrid(cycle_lon, lat)


首先当然是要导入这个模块啦,然后通过这个函数对你的循环数据(我这里是海表温度sst,是一个二维的数据[lat:73,lon:144])和出问题的维度进行处理。之后,将处理后的维度与旧的维度进行网格化处理。(我这里就是将循环生成的新经度和没有参与循环的旧纬度重新网格化得到新的cycle_lon,cycle_lat,最后再和循环生成的新sst绘制等值线填充图)


处理之后再次绘制等值填充图,可以发现白线已经消失啦~~,非常的amazing呀~!!

附上代码,处理前:


from cartopy.util import add_cyclic_point
import matplotlib.ticker as mticker
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import pandas as pd
from netCDF4 import num2date
import cmaps
import matplotlib.pyplot as plt
import numpy as np
import netCDF4 as nc
import cartopy.crs as ccrs
from scipy import interpolate
import os
import numpy as np
import xarray as xr
path1='F://olr.nc'
path2='F://sst.nc'
da = xr.open_dataset(path2)
orl=xr.open_dataset(path1)
da = xr.open_dataset(path2)
orl=xr.open_dataset(path1)
sst = da['sst']
sst= sst.interp(lat=orl.lat.values, lon=orl.lon.values,kwargs={  "fill_value": "extrapolate"})
lon=sst['lon'][:]
lat=sst['lat']
time=sst['time'][:]
time=time.loc['1982':'2012'][:]
sst_new=sst.loc['1982':'2012'][:]
lon_range = lon[(lon>=0) & (lon<360)]
lat_range = lat
sst_region =sst_new.sel(lon=lon_range, lat=lat_range)
season_summary = sst_region.groupby(
    'time.season').mean('time', skipna=True)
fig=plt.figure(figsize=(20,12))#设置一个画板,将其返还给fig
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['font.size'] = 15
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree(central_longitude=0))
ax.coastlines()
cm = plt.cm.get_cmap('bwr')#Spectral_r
cb = ax.contourf(lon, lat_range,season_summary[1],cmap=cm,levels=np.arange(20,36),\
        )
# cycle_sst, cycle_lon = add_cyclic_point(season_summary[1], coord=lon)
# cycle_LON, cycle_LAT = np.meshgrid(cycle_lon, lat_range)
# cb=ax.contourf(cycle_LON,cycle_LAT, cycle_sst,levels=np.arange(20,36),cmap='bwr',\
#     )
ax.set_extent([-180, 180, -20, 20], crs=ccrs.PlateCarree())
ax.set_xticks(np.arange(0, 361, 30),crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(-20, 25, 5),crs=ccrs.PlateCarree())
ax.xaxis.set_major_formatter(LongitudeFormatter())#经度0度不加东西
ax.yaxis.set_major_formatter(LatitudeFormatter())
cm = plt.cm.get_cmap('bwr')#Spectral_r
ax.set_title('JJA')
cbar = plt.colorbar(cb,shrink=0.7)


处理后代码:


from cartopy.util import add_cyclic_point
import matplotlib.ticker as mticker
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import pandas as pd
from netCDF4 import num2date
import cmaps
import matplotlib.pyplot as plt
import numpy as np
import netCDF4 as nc
import cartopy.crs as ccrs
from scipy import interpolate
import os
import numpy as np
import xarray as xr
path1='F://olr.nc'
path2='F://sst.nc'
da = xr.open_dataset(path2)
orl=xr.open_dataset(path1)
da = xr.open_dataset(path2)
orl=xr.open_dataset(path1)
sst = da['sst']
sst= sst.interp(lat=orl.lat.values, lon=orl.lon.values,kwargs={  "fill_value": "extrapolate"})
lon=sst['lon'][:]
lat=sst['lat']
time=sst['time'][:]
time=time.loc['1982':'2012'][:]
sst_new=sst.loc['1982':'2012'][:]
lon_range = lon[(lon>=0) & (lon<360)]
lat_range = lat
sst_region =sst_new.sel(lon=lon_range, lat=lat_range)
season_summary = sst_region.groupby(
    'time.season').mean('time', skipna=True)
fig=plt.figure(figsize=(20,12))#设置一个画板,将其返还给fig
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['font.size'] = 15
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree(central_longitude=0))
ax.coastlines()
**cycle_sst, cycle_lon = add_cyclic_point(season_summary[1], coord=lon)
cycle_LON, cycle_LAT = np.meshgrid(cycle_lon, lat_range)
cb=ax.contourf(cycle_LON,cycle_LAT, cycle_sst,levels=np.arange(20,36),cmap='bwr',\
    )**
ax.set_extent([-180, 180, -20, 20], crs=ccrs.PlateCarree())
ax.set_xticks(np.arange(0, 361, 30),crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(-20, 25, 5),crs=ccrs.PlateCarree())
ax.xaxis.set_major_formatter(LongitudeFormatter())#经度0度不加东西
ax.yaxis.set_major_formatter(LatitudeFormatter())
cm = plt.cm.get_cmap('bwr')#Spectral_r
ax.set_title('JJA')
cbar = plt.colorbar(cb,shrink=0.7)


处理后图片如下:


20210718215606215.png


            一个努力学习python的海洋小白
                    水平有限,欢迎指正!!!
                    欢迎评论、收藏。
相关文章
|
7月前
|
Shell Python
[oeasy]python072_名字空间是怎么玩的_from_import_as_导入_namespace
本文介绍了Python中名字空间和模块导入的使用方法。主要内容包括: 1. **回忆上次内容**:回顾了之前导入系统模块(如`__hello__`、`time`)和自定义模块(如`my_file`),并介绍了如何导入和使用模块中的变量。 2. **从shell开始**:展示了如何在命令行中编辑和切换文件,以及如何通过`import`语句引入模块。 3. **修改oeasy.py**:演示了如何通过`import my_file`导入模块,并将模块中的`pi`赋值给本地变量`pi`。 4. **locals()函数**:解释了如何使用`locals()`查看当前作用域内的本地变量及其值。
105 10
|
11月前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 7
本教程介绍了SciPy的空间数据处理功能,涵盖如何使用`scipy.spatial`模块进行点的位置判断、最近点计算等操作。还详细解释了距离矩阵的概念及其在生物信息学中的应用,以及汉明距离的定义和计算方法。示例代码展示了如何计算两个点之间的汉明距离。
108 1
|
11月前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
120 1
|
12月前
|
存储 自然语言处理 Python
解密 Python 的作用域和名字空间
解密 Python 的作用域和名字空间
125 1
|
11月前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
97 0
|
12月前
|
存储 索引 Python
深度解密函数的 local 名字空间(当 Python 中混进一只薛定谔的猫……)
深度解密函数的 local 名字空间(当 Python 中混进一只薛定谔的猫……)
175 0
|
分布式计算 大数据 Java
如何使用Python的pyodps库来进行跨项目空间重命名表名?
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
119 12
|
存储 Python
Python 中的名称空间是什么?
【8月更文挑战第29天】
96 0
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化代码,增强功能深入理解操作系统:从用户空间到内核空间的旅程
【8月更文挑战第29天】本文将引导你深入理解Python装饰器的核心概念、应用场景及其对代码的优化作用。我们将从基础使用到高级应用逐步展开,通过实例展示如何利用装饰器提升代码的可读性和复用性,同时避免常见的陷阱。
|
PHP C++ Python
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
538 0

推荐镜像

更多