爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 561|回复: 0

求助!!【已经解决了,麻烦了】

[复制链接]

新浪微博达人勋

发表于 2024-4-22 23:58:26 | 显示全部楼层 |阅读模式
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()

图片:



自己画的

自己画的

文献里的

文献里的
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表