
Ich muss die Anomalien für den Atlantic Meridional Mode (AMM) darstellen. Da sich die Argo-Daten nicht auf einem Raster befinden, habe ich eines erstellt und den Median einer Box um jeden Rasterpunkt erhalten, um ihre Werte zu erhalten. Aber das schafft einige Boxen, die nicht wirklich in den Rest passen. Wenn ich nur die Medianfelder plotte, ist dies nicht zu offensichtlich, aber wenn ich die Anomalien für die positiven oder negativen Phasen des AMM plotte, werden sie offensichtlicher. Wie kann ich sie loswerden?
[Median][/https://i.stack.imgur.com/s8LIm.png]
[Anomalie][/https://i.stack.imgur.com/qxquV.png]
Ich habe bereits versucht, einfach die Mediane der Daten innerhalb des Interquartils jeder Box darzustellen, aber das löst das Problem nicht.
Code: Alles auswählen
[/def get_median(lat, lon, lat_step, lon_step, lat_data, lon_data, CT_data, SA_data, mld_data):
mean_mld = np.full((len(lat), len(lon)), np.nan)
mean_CT = np.full((len(lat), len(lon)), np.nan)
mean_SA = np.full((len(lat), len(lon)), np.nan)
for i, lat_val in enumerate(lat):
for j, lon_val in enumerate(lon):
gef = (lat_data >= lat_val - lat_step) & (lat_data <= lat_val + lat_step) & (lon_data >= lon_val - lon_step) & (lon_data <= lon_val + lon_step)
n_values = len(np.where(gef)[0])
if n_values >= 5:
mean_mld[i, j] = np.nanmedian(np.array(mld_data)[gef])
mean_CT[i, j] = np.nanmedian(np.array(CT_data)[gef])
mean_SA[i, j] = np.nanmedian(np.array(SA_data)[gef])
else:
mean_mld[i, j] = np.nan
mean_CT[i, j] = np.nan
mean_SA[i, j] = np.nan
return mean_mld, mean_CT, mean_SA
def get_median_iqr(lat, lon, lat_step, lon_step, lat_data, lon_data, CT_data, SA_data, mld_data):
median_mld = np.full((len(lat), len(lon)), np.nan)
median_CT = np.full((len(lat), len(lon)), np.nan)
median_SA = np.full((len(lat), len(lon)), np.nan)
for i, lat_val in enumerate(lat):
for j, lon_val in enumerate(lon):
gef = (lat_data >= lat_val - lat_step) & (lat_data <= lat_val + lat_step) & (lon_data >= lon_val - lon_step) & (lon_data <= lon_val + lon_step)
n_values = len(np.where(gef)[0])
if n_values >= 5:
data_mld = mld_data[gef]
data_CT = CT_data[gef]
data_SA = SA_data[gef]
mld_q25, mld_q75 = np.nanpercentile(mld_data, [25, 75])
CT_q25, CT_q75 = np.nanpercentile(CT_data, [25, 75])
SA_q25, SA_q75 = np.nanpercentile(SA_data, [25, 75])
median_mld[i, j] = np.nanmedian(data_mld[(data_mld >= mld_q25) & (data_mld <= mld_q75)])
median_CT[i, j] = np.nanmedian(data_CT[(data_CT >= CT_q25) & (data_CT <= CT_q75)])
median_SA[i, j] = np.nanmedian(data_SA[(data_SA >= SA_q25) & (data_SA <= SA_q75)])
else:
median_mld[i, j] = np.nan
median_CT[i, j] = np.nan
median_SA[i, j] = np.nan
return median_mld, median_CT, median_SA]
Wäre toll, wenn mir da jemand helfen könnte :)