NCAR / ADF

A unified collection of python scripts used to generate standard plots from CAM outputs.
Creative Commons Attribution 4.0 International
35 stars 29 forks source link

Vectors offset from correct spatial location in vector maps #223

Closed nusbaume closed 1 year ago

nusbaume commented 1 year ago

ADF run type

Model vs. Obs

What happened?

It appears that in the vector maps all of the actual vector arrows are meridionally offset from their correct geographic location by the central_longitude value, which implies that the vectors or "quivers" aren't seeing the central longitude change.

An example can be seen below, where the vectors that should represent the Indian Monsoon are instead way out in the Pacific:

Wind_850hpa_JJA_LatLon_Vector_Mean

ADF Hash you are using

6c8bcd8

What machine were you running the ADF on?

CISL machine

What python environment were you using?

NPL (CISL machines only)

Extra info

@brianpm @justin-richling I am pretty sure the issue is in the use of matplotlib in plot_map_vect_and_save within lib/plotting_functions.py. Since you both have more matplotlib expertise than me, I was wondering if at some point you could take a look and see if there is anything obviously wrong? Thanks a bunch!

brianpm commented 1 year ago

Quick look shows that maybe the contour is the one that is wrong:

img1 = ax1.contourf(lons, lats, mdl_mag, cmap='Greys', transform=ccrs.PlateCarree())
    ax1.quiver(lons[skip], lats[skip], umdlfld[skip], vmdlfld[skip], mdl_mag.values[skip], transform=ccrs.PlateCarree(central_longitude=cent_long), cmap='Reds')

    img2 = ax2.contourf(lons, lats, obs_mag, cmap='Greys', transform=ccrs.PlateCarree())
    ax2.quiver(lons[skip], lats[skip], uobsfld[skip], vobsfld[skip], obs_mag.values[skip], transform=ccrs.PlateCarree(central_longitude=cent_long), cmap='Reds')

Same goes for farther down with the difference. I wonder if we just need to change to:

img1 = ax1.contourf(lons, lats, mdl_mag, cmap='Greys', transform=ccrs.PlateCarree(central_longitude=cent_long))
ax1.quiver(lons[skip], lats[skip], umdlfld[skip], vmdlfld[skip], mdl_mag.values[skip], transform=ccrs.PlateCarree(central_longitude=cent_long), cmap='Reds')

img2 = ax2.contourf(lons, lats, obs_mag, cmap='Greys', transform=ccrs.PlateCarree(central_longitude=cent_long))
ax2.quiver(lons[skip], lats[skip], uobsfld[skip], vobsfld[skip], obs_mag.values[skip], transform=ccrs.PlateCarree(central_longitude=cent_long), cmap='Reds')