- 积分
- 61
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2022-8-14
- 最后登录
- 1970-1-1
|
Python
系统平台: |
|
问题截图: |
- |
问题概况: |
请问一下各位大佬们,自己比较小白,最近摸索尝试绘制全球夏季以及年平均海温与地区雨季降水的相关系数图,但是绘制出来的结果与文献并不一致(文献中的相关系数图是夏季降水与夏季海温的相关性):我绘制出来的雨季降水与赤道西太平洋呈现出一个负相关,文献则是正相关,但是利用的海温资料都是相同的英国哈德来中心的资料,研究的时间范围一个是63-22,一个是61-20,基本可以说是一致的,自己看代码也想不出哪里有误,不知道是哪里错了,询问导师无果,只好麻烦各位大佬帮忙看一下吗,下文附代码和图: |
我看过提问的智慧: |
看过 |
自己思考时长(天): |
3 |
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 胡萝卜糊了 于 2024-5-9 23:46 编辑
代码:import xarray as xrimport numpy as np
import datetime as dt
import pandas as pd
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import scipy.stats
import matplotlib
from scipy.stats import pearsonr
from netCDF4 import Dataset
from scipy.stats import linregress
matplotlib.rcParams['axes.unicode_minus']=False#负号
matplotlib.rcParams['font.family'] = 'SimHei'#中文
f = xr.open_dataset('rainfall_and_sst/HadISST_sst.nc')
df = pd.read_csv('rainfall_and_sst/多年平均值.csv',encoding='gbk')
years = np.arange(1960, 2023)
sst_year_data = f['sst'].loc[f.time.dt.year.isin(years) & f.time.dt.month.isin([6,7,8])]
rainfall_data = np.array(df['多年平均值'])
sst_year_data_filtered = sst_year_data.where(sst_year_data != -1000, drop=True)
annual_mean_data = sst_year_data_filtered.groupby('time.year').mean('time', skipna=True)
# 获取经度和纬度坐标
lon_values = annual_mean_data.coords['longitude'].values
lat_values = annual_mean_data.coords['latitude'].values
correlation_data = []
time_steps = annual_mean_data.shape[0]
for lat_idx in range(annual_mean_data.shape[1]): # 纬度
for lon_idx in range(annual_mean_data.shape[2]): # 经度
lon = lon_values[lon_idx]
lat = lat_values[lat_idx]
sst_data_station = annual_mean_data[:, lat_idx, lon_idx]
slope, intercept, r_value, p_value, std_err = linregress( sst_data_station,rainfall_data )
correlation_data.append((slope, intercept, r_value, p_value, lon, lat))
correlation_coefficients = np.array([data[2] for data in correlation_data])
correlation_coefficients_2d = correlation_coefficients.reshape(annual_mean_data.shape[1], annual_mean_data.shape[2])
lon_grid,lat_grid = np.meshgrid( lon_values,lat_values)
# 绘制相关系数填色图
plt.figure(figsize=(20, 12), dpi=600)
ax = plt.axes(projection=ccrs.PlateCarree())
plt.contourf( lon_grid,lat_grid, correlation_coefficients_2d, levels=np.arange(-0.5,0.6,0.1), cmap='coolwarm')
ax.coastlines()
colorbar = plt.colorbar(orientation='horizontal', ticks=np.arange(-0.5, 0.6, 0.1), shrink=0.7, extend='both', pad=0.05)
colorbar.ax.tick_params(labelsize=15)
colorbar.set_label('相关系数(打点表示通过90%置信水平检验)', fontsize=15)
# 设置经度和纬度刻度
ax.set_xticks([-180,-150, -120,-90, -60,-30, 0,30, 60,90, 120,150, 180], crs=ccrs.PlateCarree())
ax.set_yticks([-90, -60, -30, 0, 30, 60, 90], crs=ccrs.PlateCarree())
ax.set_xticklabels(['180°W','150°W', '120°W','90°W', '60°W','30°W', '0°', '30°E','60°E','90°E', '120°E','150°E', '180°E'], fontsize=12)
ax.set_yticklabels(['90°S', '60°S', '30°S', '0°', '30°N', '60°N', '90°N'], fontsize=12)
# 显著性填充
p_value = np.asarray([data[3] for data in correlation_data]).reshape((annual_mean_data.shape[1], annual_mean_data.shape[2]))
c1b = ax.contourf(lon_grid,lat_grid, p_value, [np.nanmin(p_value), 0.1, np.nanmax(p_value)], hatches=['.', None], colors="none", transform=ccrs.PlateCarree())
plt.show()
图片:
|
-
自己画的
-
文献里的
|