This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
Hi, No problem. Thanks for sending it over. Working with this script was...illuminating. Not because there's anything fundamentally wrong there, it just helps to see how people tackle things, and more importantly be inspired to see what challenges exist. And there were *many* challenges as I tweaked your script to work like I wanted it to. So here's the version I arrived at: import matplotlib as mpl mpl.use('Agg') import matplotlib.pyplot as plt import numpy as np from datetime import datetime from siphon.catalog import TDSCatalog import metpy.calc as mpcalc from metpy.units import units from metpy.plots import SkewT # Use siphon to get a random weather model dataset dt = datetime(2020, 7, 19, 0) cat = TDSCatalog(f"https://www.ncei.noaa.gov/thredds/catalog/model-rap130/{dt:%Y%m}/{dt:%Y%m%d}/catalog.xml") ds = cat.datasets[f"rap_130_{dt:%Y%m%d_%H%M_000.grb2}"] data = ds.remote_access(use_xarray=True) data = data.metpy.parse_cf() # Get the data fields from the file tmpk = data['Temperature_isobaric'][0,:,150,150] # Give it any random y,x # Flip here and everything else will be consistent tmpk = np.flip(tmpk) # Pressure needs to go bottom to top--vertical always points to the vertical coordinate pres = tmpk.metpy.vertical # Converts XArray to Pint-wrapping numpy using units metadata # This *shouldn't* be needed but makes plotting work far more easily tmpk = tmpk.metpy.unit_array pres = pres.metpy.unit_array # Initialize the plot and overlay the data fig = plt.figure(figsize=(1600/96, 1600/96)) skew = SkewT(fig, rotation=45) skew.plot(pres, tmpk, 'r', linewidth=3.) # This works fine # Calculate a parcel profile # Just use some dummy surface temps and dew points for the sake of this example tmpcsfc = 40. * units.degC tdsfc = 20. * units.degC parcel_prof = mpcalc.parcel_profile(pres, tmpcsfc, tdsfc) skew.shade_cape(pres, tmpk, parcel_prof, facecolor='#ffeb66', alpha=0.4) # Set the plot to use degC skew.ax.xaxis.set_units(units.degC) Instead of using NCSS, I had it use OPeNDAP and xarray--which paves the way to avoiding a lot of hand-manipulation of units. Unfortunately, the happy path is not nearly as robust as I'd like. If any of that is unclear, I'm happy to clarify. Thanks for some inspiration on how we can make things better! Ryan > Here's the example script I was talking about on Twitter. Thanks again for > all you do! Ticket Details =================== Ticket ID: XTF-300986 Department: Support Python Priority: Low Status: Closed =================== NOTE: All email exchanges with Unidata User Support are recorded in the Unidata inquiry tracking system and then made publicly available through the web. If you do not want to have your interactions made available in this way, you must let us know in each email you send to us.