GOES-East Full Disk 域实时图像与实际数据不符

GOES-East Full Disk domain realtime imagery does not fit actual data

我正在尝试使用 metpy 绘制 GOES-East 全盘数据,并使用 Siphon 从 THREDDS 数据服务器下载最新数据。但是,将我的绘图与实时图像进行比较后,似乎差异很大。

下面是我的代码:

import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
import metpy.calc as mpcalc
from metpy.plots.ctables import registry
from metpy.plots import add_timestamp
from metpy.units import units
from siphon.catalog import TDSCatalog
import xarray as xr
import numpy as np
from xarray.backends import NetCDF4DataStore
from datetime import datetime, timedelta

dt = datetime.utcnow().date()

data = TDSCatalog(f'http://thredds.ucar.edu/thredds/catalog/satellite/goes/east/products/'
                 f'CloudAndMoistureImagery/FullDisk/Channel09/{dt:%Y%m%d}/catalog.xml')

sat_dataset = data.datasets[0].remote_access(use_xarray = True)
cmi = sat_dataset.metpy.parse_cf('Sectorized_CMI')
x = cmi.coords['x'][:]
y = cmi.coords['y'][:]
timestamp = datetime.strptime(str(cmi.time.values.astype('datetime64[s]')), '%Y-%m-%dT%H:%M:%S')
print(timestamp)

vtime = timestamp.strftime('%Y-%m-%d %H%M%S')
    
# Create the figure
fig = plt.figure(figsize = [16, 10])
ax = fig.add_subplot(1, 1, 1, projection = cmi.metpy.cartopy_crs)
ax.set_extent([-80, -45, -50, -15], crs = ccrs.PlateCarree())
ax.add_feature(cfeature.BORDERS.with_scale('50m'), edgecolor = 'black', linewidth = 1)
ax.add_feature(cfeature.COASTLINE.with_scale('50m'), edgecolor = 'black', linewidth = 1)
ax.add_feature(cfeature.STATES.with_scale('50m'), edgecolor = 'white', linewidth = 1)

# Add mapping information
ax.add_feature(cfeature.STATES)
ax.add_feature(cfeature.BORDERS, linewidth=2)

# Plot the image with our colormapping choices
wv_norm, wv_cmap = registry.get_with_range('WVCIMSS_r', 193, 283)
im = ax.imshow(cmi, extent=(x[0], x[-1], y[0], y[-1]), origin='upper',
               cmap = wv_cmap, norm = wv_norm, transform = cmi.metpy.cartopy_crs)
plt.colorbar(im, ticks = np.arange(193, 293, 10), ax = ax)

plt.title(f'Vapor da Água em Níveis Médios [$K$] \nValid: {vtime} UTC', loc = 'left')

plt.savefig(f'/mnt/c/Users/vitor/Desktop/WV_{vtime}.jpg', bbox_inches = 'tight')

下面还有我的代码输出与 CODNEXLAB 网站的实际水蒸气图像之间的比较。我还查看了下载文件的元数据,一切似乎都很好。不确定我在这里做错了什么。

您看到的是您的图像翻转了(如果您查看该数据的全局图,则更容易识别)。发生的事情是您指定的原点 ('upper'/'lower') 与您传递的范围不一致。所以要么调整你的 origin 参数:

im = ax.imshow(cmi, extent=(x[0], x[-1], y[0], y[-1]),
               origin='lower', cmap=wv_cmap, norm=wv_norm,
               transform=cmi.metpy.cartopy_crs)

或翻转 y 范围的顺序:

im = ax.imshow(cmi, extent=(x[0], x[-1], y[-1], y[0]),
               origin='upper', cmap=wv_cmap, norm=wv_norm,
               transform=cmi.metpy.cartopy_crs)