cf-plot 3.5.0__tar.gz → 3.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cf_plot-3.5.0 → cf_plot-3.6.0}/PKG-INFO +58 -6
- cf_plot-3.5.0/cf_plot.egg-info/PKG-INFO → cf_plot-3.6.0/README.md +39 -31
- cf_plot-3.6.0/cf_plot.egg-info/PKG-INFO +169 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cf_plot.egg-info/requires.txt +0 -1
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/__init__.py +42 -10
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/blockfill.py +14 -11
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colorbar.py +6 -2
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colour.py +6 -2
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/contour.py +352 -169
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/layout_runtime.py +206 -30
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/line.py +151 -60
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/map_runtime.py +47 -10
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot.py-allissuesfixedyay +2 -2
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot.py-fixesslb14 +2 -2
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot.py-maskedwhitedoubles +2 -2
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/stipple.py +34 -21
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/stream.py +49 -1
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/trajectory.py +146 -80
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/utility.py +7 -5
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/validate.py +1 -1
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/vector.py +107 -64
- {cf_plot-3.5.0 → cf_plot-3.6.0}/pyproject.toml +41 -8
- cf_plot-3.5.0/README.md +0 -86
- {cf_plot-3.5.0 → cf_plot-3.6.0}/LICENSE.txt +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/MANIFEST.in +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cf_plot.egg-info/SOURCES.txt +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cf_plot.egg-info/dependency_links.txt +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cf_plot.egg-info/top_level.txt +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/__init__.py +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/3gauss.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/3saw.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BkBlAqGrYeOrReViWh200.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlAqGrYeOrRe.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlAqGrYeOrReVi200.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlGrYeOrReVi200.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlRe.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlWhRe.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlueDarkOrange18.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlueDarkRed18.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlueGreen14.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlueRed.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlueRedGray.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlueWhiteOrangeRed.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BlueYellowRed.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BrBG.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/BrownBlue12.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/Cat12.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/GHRSST_anomaly.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/GrayWhiteGray.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/GreenMagenta16.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/GreenYellow.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/OceanLakeLandSnow.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/StepSeq25.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/ViBlGrWhYeOrRe.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/WhBlGrYeRe.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/WhBlReWh.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/WhViBlGrYeOrRe.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/WhViBlGrYeOrReWh.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/WhiteBlue.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/WhiteBlueGreenYellowRed.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/WhiteGreen.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/WhiteYellowOrangeRed.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/__init__.py +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/amwg.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/amwg256.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/amwg_blueyellowred.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/arctic.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/cmp_b2r.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/cmp_flux.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/cmp_haxby.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/colombia.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/colournames.txt +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/cosam.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/cosam12.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/default.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/detail.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/extrema.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/gray.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/gui_default.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/helix.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/helix1.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/hlu_default.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/hotcold_18lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/hotcolr_19lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/hotres.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl0.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl1.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl10.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl11.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl12.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl13.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl14.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl15.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl16.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl17.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl18.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl19.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl2.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl20.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl21.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl22.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl23.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl24.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl25.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl26.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl27.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl28.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl29.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl3.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl30.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl31.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl32.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl33.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl34.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl35.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl36.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl37.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl38.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl39.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl4.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl5.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl6.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl7.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl8.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/idl9.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/inferno.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/magma.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/matlab_hot.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/matlab_hsv.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/matlab_jet.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/matlab_lines.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/mch_default.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/ncl_default.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/ncview_default.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/nrl_sirkes.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/nrl_sirkes_nowhite.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/nrwc.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/os250kmetres.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/parula.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/perc2_9lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/percent_11lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/plasma.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/posneg_1.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/posneg_2.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/prcp_1.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/prcp_2.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/prcp_3.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/precip2_15lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/precip2_17lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/precip3_16lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/precip4_11lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/precip4_diff_19lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/precip_11lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/precip_diff_12lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/precip_diff_1lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/radar.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/radar_1.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/rainbow.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/rainbow_gray.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/rainbow_white.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/rainbow_white_gray.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/rh_19lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale1.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale10.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale11.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale12.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale13.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale14.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale15.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale16.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale17.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale18.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale19.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale2.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale20.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale21.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale22.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale23.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale24.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale25.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale26.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale27.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale28.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale29.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale3.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale30.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale31.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale32.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale33.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale34.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale35.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale36.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale37.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale38.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale39.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale4.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale40.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale41.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale42.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale43.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale44.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale5.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale6.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale7.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale8.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/scale9.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/seaice_1.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/seaice_2.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/so4_21.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/so4_23.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/spread_15lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/sunshine_9lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/sunshine_diff_12lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/t2m_29lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/tbrAvg1.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/tbrStd1.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/tbrVar1.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/tbr_240_300.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/tbr_stdev_0_30.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/tbr_var_0_500.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/temp_19lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/temp_diff_18lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/temp_diff_1lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/testcmap.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/thelix.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/topo_15lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/vcs.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/viridis.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/wgne15.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/wh_bl_gr_ye_re.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/wiki_1_0_2.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/wiki_1_0_3.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/wiki_2_0.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/wiki_2_0_reduced.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/wind_17lev.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour/colourmaps/wxpEnIR.rgb +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/colour.py +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/classes_cfplot-afterrejig.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/classes_cfplot-finalpr.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/classes_cfplot-vis-postupdate.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/classes_cfplot-vis-postupdate2.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/classes_cfplot-vis-postupdate3.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/classes_cfplot-vis.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/packages_cfplot-afterrejig.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/packages_cfplot-finalpr.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/packages_cfplot-vis-postupdate.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/packages_cfplot-vis-postupdate2.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/packages_cfplot-vis-postupdate3.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot-vis-new-and-old/packages_cfplot-vis.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot_a001.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot_a002.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/cfplot_a003.png +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/era5_mon_sur_post1979.land.ant.timmean.nc +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/era_test_script.py-sadie +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/latest-traj-one.diff +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/mapping/__init__.py +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/old_backup/mapping/mapping.py +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/rotated_runtime.py +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/state.py +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/stream.oldpre123pr.py +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/cfplot/trajectory.py-fixatt +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/setup.cfg +0 -0
- {cf_plot-3.5.0 → cf_plot-3.6.0}/tests/test_realdata.py +0 -0
|
@@ -1,31 +1,44 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cf-plot
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.6.0
|
|
4
4
|
Summary: Code-light plotting for earth science and aligned research
|
|
5
|
-
Author
|
|
5
|
+
Author: Andy Heaps, Bryan Lawrence
|
|
6
|
+
Author-email: Sadie Bartholomew <sadie.bartholomew@ncas.ac.uk>
|
|
6
7
|
Maintainer-email: Sadie Bartholomew <sadie.bartholomew@ncas.ac.uk>
|
|
7
8
|
License-Expression: MIT
|
|
8
9
|
Project-URL: Homepage, https://ncas-cms.github.io/cf-plot/
|
|
10
|
+
Project-URL: Documentation, https://ncas-cms.github.io/cf-plot/
|
|
11
|
+
Project-URL: Source, https://github.com/NCAS-CMS/cf-plot
|
|
12
|
+
Project-URL: Download, https://pypi.org/project/cf-plot/
|
|
13
|
+
Project-URL: Installation, https://ncas-cms.github.io/cf-plot/installation.html
|
|
14
|
+
Project-URL: Release Notes, https://github.com/NCAS-CMS/cf-plot/blob/main/CHANGELOG.md
|
|
15
|
+
Project-URL: Issues, https://github.com/NCAS-CMS/cf-plot/issues
|
|
16
|
+
Keywords: visualisation,visualization,scientific-visualisation,scientific-visualization,atmospheric-science,meteorology,earth-science,climate-science,geoscience,oceanography,cartography,cf-conventions,cf,data-analysis,netcdf,zarr
|
|
9
17
|
Classifier: Development Status :: 5 - Production/Stable
|
|
10
18
|
Classifier: Operating System :: Unix
|
|
11
19
|
Classifier: Operating System :: POSIX
|
|
12
20
|
Classifier: Operating System :: POSIX :: Linux
|
|
13
21
|
Classifier: Operating System :: MacOS :: MacOS X
|
|
14
22
|
Classifier: Programming Language :: Python
|
|
15
|
-
Classifier: Programming Language :: Python ::
|
|
23
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
24
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
25
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
26
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
27
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
28
|
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
-
Classifier:
|
|
29
|
+
Classifier: Intended Audience :: Developers
|
|
30
|
+
Classifier: Intended Audience :: Science/Research
|
|
21
31
|
Classifier: Topic :: Scientific/Engineering
|
|
22
32
|
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
23
33
|
Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
|
|
24
|
-
|
|
34
|
+
Classifier: Topic :: Scientific/Engineering :: Oceanography
|
|
35
|
+
Classifier: Topic :: Scientific/Engineering :: Hydrology
|
|
36
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
37
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
38
|
+
Requires-Python: >=3.11
|
|
25
39
|
Description-Content-Type: text/markdown
|
|
26
40
|
License-File: LICENSE.txt
|
|
27
41
|
Requires-Dist: cf-python>=3.17.0
|
|
28
|
-
Requires-Dist: scipy>=1.4.0
|
|
29
42
|
Requires-Dist: cartopy>=0.22.0
|
|
30
43
|
Dynamic: license-file
|
|
31
44
|
|
|
@@ -100,6 +113,45 @@ More detail about installation is provided on the
|
|
|
100
113
|
(`https://ncas-cms.github.io/cf-plot/installation.html`)
|
|
101
114
|
of the documentation.
|
|
102
115
|
|
|
116
|
+
### Testing
|
|
117
|
+
|
|
118
|
+
To run the full test suite, call from the repo root:
|
|
119
|
+
|
|
120
|
+
``` bash
|
|
121
|
+
$ pytest tests
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Note however this calls image comparison testing on plot outputs and exact
|
|
125
|
+
image comparison depends on the environment (libraries and versions) used.
|
|
126
|
+
So they may fail if your environment differs from that which was used to
|
|
127
|
+
generate the reference images. Therefore, to allow like-for-like comparison,
|
|
128
|
+
a specific testing conda environment is provided, ``cfplot-test-env.yml``.
|
|
129
|
+
With this environment enabled, the image comparison should pass. Note we
|
|
130
|
+
recommend use of `mamba` for environment creation/solving, but `conda`
|
|
131
|
+
will also work.
|
|
132
|
+
|
|
133
|
+
```console
|
|
134
|
+
$ # Deactivate all other environments present first
|
|
135
|
+
$ mamba env create --file cfplot-test-env.yml --name cfplot-test-env
|
|
136
|
+
$ conda activate cfplot-test-env
|
|
137
|
+
$ pytest tests
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
However you can disable this aspect with the ``--skip-image-comparison``
|
|
141
|
+
or equivalently ``-I`` option to the cf-plot test suite run with `pytest`,
|
|
142
|
+
so that only the functional tests run. This is advised when you use any
|
|
143
|
+
environment other than the above, except where some library version
|
|
144
|
+
differs for the purpose of regression testing on that versioning change.
|
|
145
|
+
|
|
146
|
+
```console
|
|
147
|
+
$ pytest tests -I
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
> [!NOTE]
|
|
151
|
+
> More comprehensive testing across different environments is under development
|
|
152
|
+
> but is not yet available. For now, use the reference environment to test with.
|
|
153
|
+
|
|
154
|
+
|
|
103
155
|
### Contributing
|
|
104
156
|
|
|
105
157
|
Everyone is welcome to contribute to cf-plot in the form
|
|
@@ -1,34 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: cf-plot
|
|
3
|
-
Version: 3.5.0
|
|
4
|
-
Summary: Code-light plotting for earth science and aligned research
|
|
5
|
-
Author-email: Andy Heaps <andy.heaps@ncas.ac.uk>
|
|
6
|
-
Maintainer-email: Sadie Bartholomew <sadie.bartholomew@ncas.ac.uk>
|
|
7
|
-
License-Expression: MIT
|
|
8
|
-
Project-URL: Homepage, https://ncas-cms.github.io/cf-plot/
|
|
9
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
10
|
-
Classifier: Operating System :: Unix
|
|
11
|
-
Classifier: Operating System :: POSIX
|
|
12
|
-
Classifier: Operating System :: POSIX :: Linux
|
|
13
|
-
Classifier: Operating System :: MacOS :: MacOS X
|
|
14
|
-
Classifier: Programming Language :: Python
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
-
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
|
-
Classifier: Topic :: Scientific/Engineering
|
|
22
|
-
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
23
|
-
Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
|
|
24
|
-
Requires-Python: >=3.10
|
|
25
|
-
Description-Content-Type: text/markdown
|
|
26
|
-
License-File: LICENSE.txt
|
|
27
|
-
Requires-Dist: cf-python>=3.17.0
|
|
28
|
-
Requires-Dist: scipy>=1.4.0
|
|
29
|
-
Requires-Dist: cartopy>=0.22.0
|
|
30
|
-
Dynamic: license-file
|
|
31
|
-
|
|
32
1
|
# cf-plot
|
|
33
2
|
|
|
34
3
|
## Code-light plotting for earth science and aligned research
|
|
@@ -100,6 +69,45 @@ More detail about installation is provided on the
|
|
|
100
69
|
(`https://ncas-cms.github.io/cf-plot/installation.html`)
|
|
101
70
|
of the documentation.
|
|
102
71
|
|
|
72
|
+
### Testing
|
|
73
|
+
|
|
74
|
+
To run the full test suite, call from the repo root:
|
|
75
|
+
|
|
76
|
+
``` bash
|
|
77
|
+
$ pytest tests
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Note however this calls image comparison testing on plot outputs and exact
|
|
81
|
+
image comparison depends on the environment (libraries and versions) used.
|
|
82
|
+
So they may fail if your environment differs from that which was used to
|
|
83
|
+
generate the reference images. Therefore, to allow like-for-like comparison,
|
|
84
|
+
a specific testing conda environment is provided, ``cfplot-test-env.yml``.
|
|
85
|
+
With this environment enabled, the image comparison should pass. Note we
|
|
86
|
+
recommend use of `mamba` for environment creation/solving, but `conda`
|
|
87
|
+
will also work.
|
|
88
|
+
|
|
89
|
+
```console
|
|
90
|
+
$ # Deactivate all other environments present first
|
|
91
|
+
$ mamba env create --file cfplot-test-env.yml --name cfplot-test-env
|
|
92
|
+
$ conda activate cfplot-test-env
|
|
93
|
+
$ pytest tests
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
However you can disable this aspect with the ``--skip-image-comparison``
|
|
97
|
+
or equivalently ``-I`` option to the cf-plot test suite run with `pytest`,
|
|
98
|
+
so that only the functional tests run. This is advised when you use any
|
|
99
|
+
environment other than the above, except where some library version
|
|
100
|
+
differs for the purpose of regression testing on that versioning change.
|
|
101
|
+
|
|
102
|
+
```console
|
|
103
|
+
$ pytest tests -I
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
> [!NOTE]
|
|
107
|
+
> More comprehensive testing across different environments is under development
|
|
108
|
+
> but is not yet available. For now, use the reference environment to test with.
|
|
109
|
+
|
|
110
|
+
|
|
103
111
|
### Contributing
|
|
104
112
|
|
|
105
113
|
Everyone is welcome to contribute to cf-plot in the form
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cf-plot
|
|
3
|
+
Version: 3.6.0
|
|
4
|
+
Summary: Code-light plotting for earth science and aligned research
|
|
5
|
+
Author: Andy Heaps, Bryan Lawrence
|
|
6
|
+
Author-email: Sadie Bartholomew <sadie.bartholomew@ncas.ac.uk>
|
|
7
|
+
Maintainer-email: Sadie Bartholomew <sadie.bartholomew@ncas.ac.uk>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
Project-URL: Homepage, https://ncas-cms.github.io/cf-plot/
|
|
10
|
+
Project-URL: Documentation, https://ncas-cms.github.io/cf-plot/
|
|
11
|
+
Project-URL: Source, https://github.com/NCAS-CMS/cf-plot
|
|
12
|
+
Project-URL: Download, https://pypi.org/project/cf-plot/
|
|
13
|
+
Project-URL: Installation, https://ncas-cms.github.io/cf-plot/installation.html
|
|
14
|
+
Project-URL: Release Notes, https://github.com/NCAS-CMS/cf-plot/blob/main/CHANGELOG.md
|
|
15
|
+
Project-URL: Issues, https://github.com/NCAS-CMS/cf-plot/issues
|
|
16
|
+
Keywords: visualisation,visualization,scientific-visualisation,scientific-visualization,atmospheric-science,meteorology,earth-science,climate-science,geoscience,oceanography,cartography,cf-conventions,cf,data-analysis,netcdf,zarr
|
|
17
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
18
|
+
Classifier: Operating System :: Unix
|
|
19
|
+
Classifier: Operating System :: POSIX
|
|
20
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
21
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
22
|
+
Classifier: Programming Language :: Python
|
|
23
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
24
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
28
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
29
|
+
Classifier: Intended Audience :: Developers
|
|
30
|
+
Classifier: Intended Audience :: Science/Research
|
|
31
|
+
Classifier: Topic :: Scientific/Engineering
|
|
32
|
+
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
33
|
+
Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
|
|
34
|
+
Classifier: Topic :: Scientific/Engineering :: Oceanography
|
|
35
|
+
Classifier: Topic :: Scientific/Engineering :: Hydrology
|
|
36
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
37
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
38
|
+
Requires-Python: >=3.11
|
|
39
|
+
Description-Content-Type: text/markdown
|
|
40
|
+
License-File: LICENSE.txt
|
|
41
|
+
Requires-Dist: cf-python>=3.17.0
|
|
42
|
+
Requires-Dist: cartopy>=0.22.0
|
|
43
|
+
Dynamic: license-file
|
|
44
|
+
|
|
45
|
+
# cf-plot
|
|
46
|
+
|
|
47
|
+
## Code-light plotting for earth science and aligned research
|
|
48
|
+
|
|
49
|
+
### Overview
|
|
50
|
+
|
|
51
|
+

|
|
52
|
+
|
|
53
|
+
**cf-plot allows you to produce and customise publication-quality contour,
|
|
54
|
+
vector, line and more plots with the power of Python,
|
|
55
|
+
[matplotlib](https://matplotlib.org/),
|
|
56
|
+
[Cartopy](https://scitools.org.uk/cartopy/docs/latest/) and
|
|
57
|
+
[cf-python](https://ncas-cms.github.io/cf-python/), in as few lines of code
|
|
58
|
+
as possible.**
|
|
59
|
+
|
|
60
|
+
It is designed to be a useful visualisation tool for environmental, earth
|
|
61
|
+
and aligned sciences, for example to facilitate climate and meteorological
|
|
62
|
+
research. cf-plot is developed and maintained by the
|
|
63
|
+
[NCAS-CMS](https://cms.ncas.ac.uk/index.html) group, part of
|
|
64
|
+
[NCAS](https://ncas.ac.uk/).
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
### Brief Demonstration
|
|
68
|
+
|
|
69
|
+
In as little as four lines of Python including imports and file reading,
|
|
70
|
+
using `cf-plot` you can for example produce a contour plot showing a 2D
|
|
71
|
+
subspace of a netCDF dataset:
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
import cf
|
|
75
|
+
import cfplot as cfp
|
|
76
|
+
f = cf.read('<dataset name>.nc')[0] # picks out a read-in field of the dataset
|
|
77
|
+
cfp.con(f.subspace(time=<chosen time value>)) # creates a contour plot of the field at that time value
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
### Examples Gallery
|
|
82
|
+
|
|
83
|
+
A gallery of outputs made with cf-plot, showcasing a range of plotting
|
|
84
|
+
possibilities with links to relevant documentation pages and to example code,
|
|
85
|
+
can be found
|
|
86
|
+
[on this dedicated page within the documentation](https://ncas-cms.github.io/cf-plot/gallery_of_examples.html),
|
|
87
|
+
as illustrated in the (static) image at the top of this document.
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
### Documentation
|
|
91
|
+
|
|
92
|
+
See [the cf-plot homepage](https://ncas-cms.github.io/cf-plot/)
|
|
93
|
+
(`https://ncas-cms.github.io/cf-plot`) for the full online documentation.
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
### Installation
|
|
97
|
+
|
|
98
|
+
To install cf-plot with its required dependencies, you can use `pip`:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
pip install cf-python cf-plot
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
or you can use `conda` (or similar package managers such
|
|
105
|
+
as `mamba`) as follows (or equivalent):
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
conda install -c ncas -c conda-forge cf-python cf-plot udunits2
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
More detail about installation is provided on the
|
|
112
|
+
[installation page](https://ncas-cms.github.io/cf-plot/installation.html)
|
|
113
|
+
(`https://ncas-cms.github.io/cf-plot/installation.html`)
|
|
114
|
+
of the documentation.
|
|
115
|
+
|
|
116
|
+
### Testing
|
|
117
|
+
|
|
118
|
+
To run the full test suite, call from the repo root:
|
|
119
|
+
|
|
120
|
+
``` bash
|
|
121
|
+
$ pytest tests
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Note however this calls image comparison testing on plot outputs and exact
|
|
125
|
+
image comparison depends on the environment (libraries and versions) used.
|
|
126
|
+
So they may fail if your environment differs from that which was used to
|
|
127
|
+
generate the reference images. Therefore, to allow like-for-like comparison,
|
|
128
|
+
a specific testing conda environment is provided, ``cfplot-test-env.yml``.
|
|
129
|
+
With this environment enabled, the image comparison should pass. Note we
|
|
130
|
+
recommend use of `mamba` for environment creation/solving, but `conda`
|
|
131
|
+
will also work.
|
|
132
|
+
|
|
133
|
+
```console
|
|
134
|
+
$ # Deactivate all other environments present first
|
|
135
|
+
$ mamba env create --file cfplot-test-env.yml --name cfplot-test-env
|
|
136
|
+
$ conda activate cfplot-test-env
|
|
137
|
+
$ pytest tests
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
However you can disable this aspect with the ``--skip-image-comparison``
|
|
141
|
+
or equivalently ``-I`` option to the cf-plot test suite run with `pytest`,
|
|
142
|
+
so that only the functional tests run. This is advised when you use any
|
|
143
|
+
environment other than the above, except where some library version
|
|
144
|
+
differs for the purpose of regression testing on that versioning change.
|
|
145
|
+
|
|
146
|
+
```console
|
|
147
|
+
$ pytest tests -I
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
> [!NOTE]
|
|
151
|
+
> More comprehensive testing across different environments is under development
|
|
152
|
+
> but is not yet available. For now, use the reference environment to test with.
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
### Contributing
|
|
156
|
+
|
|
157
|
+
Everyone is welcome to contribute to cf-plot in the form
|
|
158
|
+
of bug reports, documentation, code, design proposals, and more.
|
|
159
|
+
|
|
160
|
+
Contributing guidelines are available in a
|
|
161
|
+
[dedicated document](https://github.com/NCAS-CMS/cf-plot/blob/main/.github/CONTRIBUTING.md) which is
|
|
162
|
+
copied into the [documentation here](https://ncas-cms.github.io/cf-plot/support.html#contributing-to-cf-plot).
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
### Help: Issues, Questions, Feature Requests, etc.
|
|
166
|
+
|
|
167
|
+
For any queries, see the
|
|
168
|
+
[guidance page](https://ncas-cms.github.io/cf-plot/support.html)
|
|
169
|
+
(`https://ncas-cms.github.io/cf-plot/support.html`).
|
|
@@ -7,22 +7,33 @@ Documentation is hosted and found at: https://ncas-cms.github.io/cf-plot/
|
|
|
7
7
|
from .colorbar import cbar
|
|
8
8
|
from .colour import cscale
|
|
9
9
|
from .contour import con, levs
|
|
10
|
-
from .layout_runtime import gclose, gopen, gpos, gset
|
|
11
|
-
from .line import lineplot
|
|
10
|
+
from .layout_runtime import axes, gclose, gfigure, gopen, gpos, gset
|
|
11
|
+
from .line import lineplot, scatter
|
|
12
12
|
from .map_runtime import mapset
|
|
13
13
|
from .rotated_runtime import _render_rotated_grid_axes
|
|
14
14
|
from .state import plotvars, reset_runtime_state, setvars
|
|
15
15
|
from .stipple import stipple
|
|
16
16
|
from .stream import stream
|
|
17
17
|
from .trajectory import traj
|
|
18
|
+
from .utility import (
|
|
19
|
+
add_cyclic,
|
|
20
|
+
calculate_levels,
|
|
21
|
+
cf_var_name,
|
|
22
|
+
cf_var_name_titles,
|
|
23
|
+
find_dim_names,
|
|
24
|
+
find_z,
|
|
25
|
+
fix_floats,
|
|
26
|
+
generate_titles,
|
|
27
|
+
)
|
|
18
28
|
from .utility import gvals as _gvals_impl
|
|
19
29
|
from .utility import mapaxis as _mapaxis_impl
|
|
20
|
-
from .utility import regrid
|
|
21
|
-
from .
|
|
30
|
+
from .utility import ndecs, polar_regular_grid, regrid, stipple_points
|
|
31
|
+
from .validate import check_well_formed, orca_check
|
|
32
|
+
from .vector import axes_plot, vect
|
|
22
33
|
|
|
23
34
|
__author__ = "Andy Heaps, Sadie Bartholomew, Bryan Lawrence"
|
|
24
|
-
__maintainer__ ="Sadie Bartholomew"
|
|
25
|
-
__date__ = "2026-10
|
|
35
|
+
__maintainer__ = "Sadie Bartholomew"
|
|
36
|
+
__date__ = "2026-11-10"
|
|
26
37
|
|
|
27
38
|
|
|
28
39
|
from importlib.metadata import PackageNotFoundError
|
|
@@ -33,7 +44,7 @@ from pathlib import Path
|
|
|
33
44
|
def _version_from_pyproject():
|
|
34
45
|
pyproject = Path(__file__).resolve().parent.parent / "pyproject.toml"
|
|
35
46
|
if not pyproject.exists():
|
|
36
|
-
return
|
|
47
|
+
return
|
|
37
48
|
|
|
38
49
|
in_project = False
|
|
39
50
|
for raw_line in pyproject.read_text(encoding="utf-8").splitlines():
|
|
@@ -47,7 +58,7 @@ def _version_from_pyproject():
|
|
|
47
58
|
_, _, value = line.partition("=")
|
|
48
59
|
return value.strip().strip('"').strip("'")
|
|
49
60
|
|
|
50
|
-
return
|
|
61
|
+
return
|
|
51
62
|
|
|
52
63
|
|
|
53
64
|
def _resolve_version():
|
|
@@ -67,6 +78,7 @@ __version__ = _resolve_version()
|
|
|
67
78
|
|
|
68
79
|
|
|
69
80
|
def reset():
|
|
81
|
+
"""Reset plotting state to the default configuration."""
|
|
70
82
|
gset()
|
|
71
83
|
cscale()
|
|
72
84
|
levs()
|
|
@@ -76,6 +88,7 @@ def reset():
|
|
|
76
88
|
|
|
77
89
|
|
|
78
90
|
def _gvals(*args, **kwargs):
|
|
91
|
+
"""Work out a sensible set of values between two limits."""
|
|
79
92
|
return _gvals_impl(*args, **kwargs)
|
|
80
93
|
|
|
81
94
|
|
|
@@ -95,6 +108,7 @@ def rgaxes(
|
|
|
95
108
|
xlabel=None,
|
|
96
109
|
ylabel=None,
|
|
97
110
|
):
|
|
111
|
+
"""Label rotated grid plots."""
|
|
98
112
|
return _render_rotated_grid_axes(
|
|
99
113
|
xpole=xpole,
|
|
100
114
|
ypole=ypole,
|
|
@@ -113,6 +127,7 @@ def rgaxes(
|
|
|
113
127
|
|
|
114
128
|
|
|
115
129
|
def _mapaxis(min=None, max=None, type=None):
|
|
130
|
+
"""Work out a sensible set of lon-lat tick marks and labels."""
|
|
116
131
|
return _mapaxis_impl(
|
|
117
132
|
min_val=min,
|
|
118
133
|
max_val=max,
|
|
@@ -122,25 +137,42 @@ def _mapaxis(min=None, max=None, type=None):
|
|
|
122
137
|
|
|
123
138
|
|
|
124
139
|
__all__ = [
|
|
140
|
+
"_gvals", # Req'd for public API?
|
|
141
|
+
"_mapaxis", # Req'd for public API?
|
|
142
|
+
"add_cyclic",
|
|
143
|
+
"axes",
|
|
144
|
+
"axes_plot",
|
|
145
|
+
"calculate_levels",
|
|
125
146
|
"cbar",
|
|
147
|
+
"cf_var_name",
|
|
148
|
+
"cf_var_name_titles",
|
|
149
|
+
"check_well_formed",
|
|
126
150
|
"con",
|
|
127
151
|
"cscale",
|
|
152
|
+
"find_dim_names",
|
|
153
|
+
"find_z",
|
|
154
|
+
"fix_floats",
|
|
128
155
|
"gclose",
|
|
156
|
+
"generate_titles",
|
|
157
|
+
"gfigure",
|
|
129
158
|
"gopen",
|
|
130
159
|
"gpos",
|
|
131
160
|
"gset",
|
|
132
161
|
"levs",
|
|
133
162
|
"lineplot",
|
|
134
163
|
"mapset",
|
|
164
|
+
"ndecs",
|
|
165
|
+
"orca_check",
|
|
135
166
|
"plotvars",
|
|
167
|
+
"polar_regular_grid",
|
|
136
168
|
"regrid",
|
|
137
169
|
"reset",
|
|
138
170
|
"rgaxes",
|
|
171
|
+
"scatter",
|
|
139
172
|
"setvars",
|
|
140
173
|
"stipple",
|
|
174
|
+
"stipple_points",
|
|
141
175
|
"stream",
|
|
142
176
|
"traj",
|
|
143
177
|
"vect",
|
|
144
|
-
"_gvals",
|
|
145
|
-
"_mapaxis",
|
|
146
178
|
]
|
|
@@ -63,19 +63,20 @@ def _bfill(
|
|
|
63
63
|
colmap = get_colour_scale_map()
|
|
64
64
|
cmap = matplotlib.colors.ListedColormap(colmap)
|
|
65
65
|
fill_colors = list(colmap)
|
|
66
|
-
if plotvars.levels_extend in ["min", "both"]:
|
|
67
|
-
cmap.set_under(plotvars.cs[0])
|
|
68
|
-
if plotvars.levels_extend in ["max", "both"]:
|
|
69
|
-
cmap.set_over(plotvars.cs[-1])
|
|
70
66
|
|
|
71
|
-
|
|
72
|
-
over_index = None
|
|
67
|
+
extremes = {}
|
|
73
68
|
if plotvars.levels_extend in ["min", "both"]:
|
|
69
|
+
extremes["under"] = plotvars.cs[0]
|
|
74
70
|
under_index = len(fill_colors)
|
|
75
71
|
fill_colors.append(plotvars.cs[0])
|
|
76
72
|
if plotvars.levels_extend in ["max", "both"]:
|
|
73
|
+
extremes["over"] = plotvars.cs[-1]
|
|
77
74
|
over_index = len(fill_colors)
|
|
78
75
|
fill_colors.append(plotvars.cs[-1])
|
|
76
|
+
|
|
77
|
+
if extremes:
|
|
78
|
+
cmap = cmap.with_extremes(**extremes)
|
|
79
|
+
|
|
79
80
|
else:
|
|
80
81
|
cols = single_fill_color
|
|
81
82
|
cmap = matplotlib.colors.ListedColormap(cols)
|
|
@@ -107,9 +108,11 @@ def _bfill(
|
|
|
107
108
|
colarr[pts] = np.size(levels) - 2
|
|
108
109
|
|
|
109
110
|
if isinstance(field, np.ma.MaskedArray):
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
# np.ma.where on a scalar False mask raises on newer NumPy.
|
|
112
|
+
# Use a normalized boolean mask array instead.
|
|
113
|
+
mask = np.ma.getmaskarray(field)
|
|
114
|
+
if np.any(mask):
|
|
115
|
+
colarr[mask] = -1
|
|
113
116
|
|
|
114
117
|
norm = matplotlib.colors.BoundaryNorm(levels, cmap.N)
|
|
115
118
|
|
|
@@ -447,10 +450,10 @@ def _bfill_ugrid(
|
|
|
447
450
|
|
|
448
451
|
levs = deepcopy(np.array(clevs))
|
|
449
452
|
|
|
450
|
-
if plotvars.levels_extend
|
|
453
|
+
if plotvars.levels_extend in ("min", "both"):
|
|
451
454
|
levs = np.concatenate([[-1e20], levs])
|
|
452
455
|
ilevs_max = np.size(levs)
|
|
453
|
-
if plotvars.levels_extend
|
|
456
|
+
if plotvars.levels_extend in ("max", "both"):
|
|
454
457
|
levs = np.concatenate([levs, [1e20]])
|
|
455
458
|
else:
|
|
456
459
|
ilevs_max = ilevs_max - 1
|
|
@@ -204,15 +204,19 @@ def cbar(
|
|
|
204
204
|
)
|
|
205
205
|
|
|
206
206
|
boundaries = levs.astype(float)
|
|
207
|
+
extremes = {}
|
|
207
208
|
if extend in ("both", "min"):
|
|
208
|
-
|
|
209
|
+
extremes["under"] = plotvars.cs[0]
|
|
209
210
|
boundaries = np.insert(boundaries, 0, boundaries[0] - 1)
|
|
210
211
|
if extend in ("both", "max"):
|
|
211
|
-
|
|
212
|
+
extremes["over"] = plotvars.cs[-1]
|
|
212
213
|
boundaries = np.insert(
|
|
213
214
|
boundaries, len(boundaries), boundaries[-1] + 1
|
|
214
215
|
)
|
|
215
216
|
|
|
217
|
+
if extremes:
|
|
218
|
+
cmap = cmap.with_extremes(**extremes)
|
|
219
|
+
|
|
216
220
|
if not isinstance(levs, list):
|
|
217
221
|
lbot = None
|
|
218
222
|
|
|
@@ -668,15 +668,19 @@ def cbar(
|
|
|
668
668
|
# Add colorbar extensions if definded by levs. Using boundaries[0]-1
|
|
669
669
|
# for the lower and boundaries[-1]+1 is just for the colorbar and
|
|
670
670
|
# has no meaning for the plot.
|
|
671
|
+
extremes = {}
|
|
671
672
|
if extend in ("both", "min"):
|
|
672
|
-
|
|
673
|
+
extremes["under"] = plotvars.cs[0]
|
|
673
674
|
boundaries = np.insert(boundaries, 0, boundaries[0] - 1)
|
|
674
675
|
if extend in ("both", "max"):
|
|
675
|
-
|
|
676
|
+
extremes["over"] = plotvars.cs[-1]
|
|
676
677
|
boundaries = np.insert(
|
|
677
678
|
boundaries, len(boundaries), boundaries[-1] + 1
|
|
678
679
|
)
|
|
679
680
|
|
|
681
|
+
if extremes:
|
|
682
|
+
cmap = cmap.with_extremes(**extremes)
|
|
683
|
+
|
|
680
684
|
if not isinstance(levs, list):
|
|
681
685
|
lbot = None
|
|
682
686
|
|