So speichern Sie Geigenplotobjekt als NPY- oder NPZ -DateienPython

Python-Programme
Anonymous
 So speichern Sie Geigenplotobjekt als NPY- oder NPZ -Dateien

Post by Anonymous »

Ich zeichne mehrere Geigendiagramme für einen großen Datensatz auf und es dauert so lange, bis eine Figur generiert wird. Ich möchte die Geigenplotting -Objekte als NPY oder NPZ retten und sie separat darstellen. Ist das möglich? Wenn ja, wie gehe ich vor?

Code: Select all

import sys
import numpy as np
import matplotlib.pyplot as plt
from netCDF4 import Dataset as ds
from freq_funcs import tparse
from datetime import datetime,timedelta

# specify variable names in line with the command line
vnm         =  sys.argv[1]

# input/output directories
idir        =  "../input/10sn"
odir        =  "../figs"

osres       =  "qd"

# for saving the figure, set this value to True
dosavefig   =  1

# models and resolutions
models      =  ["obs","e5","arpege","gem","geos","grist","gsam","icon","icon","ifs","mpas","nicam","scream","shield","um" ]
isress      =  ["qd" ,"qd","2km"   ,"5km","3km" ,"5km"  ,"4km" ,"2km" ,"5km" ,"4km","3km" ,"3km"  ,"3km"   ,"3km"   ,"5km"]
osress      =  ["qd" ,"qd","qd"    ,"qd" ,"qd"  ,"qd"   ,"qd"  ,"qd"  ,"qd"  ,"qd" ,"qd"  ,"qd"   ,"qd"    ,"qd"    ,"qd" ]

modfnm      =  ["Observation","ERA5 0.25\u00b0","ARPEGE 2km","GEM 5km","GEOS 3km","GRIST 5km","GSAM 4km","ICON 2km","ICON 5km","IFS 4km","MPAS 3km","NICAM 3km","SCREAM 3km","SHIELD 3km","UM 5km"]
#clist       =  ["C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","lightsteelblue","olive","teal","black"]
clist       =  ["black","black","C0","C1","C2","C3","C4","C5","C6","C7","C8","teal","C9","lightsteelblue","olive"]
lslist      =  ["-","--","-","-","-","-","-","-","-","-","-","-","-","-","-"]

# line widths and row/columns specifier
lwlist      =  [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
rclist      =  [(0,0),(0,1),(1,0),(1,1),(2,0),(2,1)]

# list of regions
reglist     =  ["amz","afr","pco","ino","lnd","ocn"]
regs        =  len(reglist)
tres        =  "havg"

# output file extension
fext        =  "svg"

# position settings
if (vnm == "pw"):
pos      =  [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
entries  =  len(models) - 1
zolist   =  np.arange(0,entries,1)

print(entries,len(zolist),zolist)
else:
pos      =  [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
entries  =  len(models)
zolist   =  np.arange(0,entries,1)

print(entries,len(zolist),zolist)

nums        =  np.arange(0,entries,1)

fig,axs     =  plt.subplots(3,2,figsize=(12,10))

if    (vnm  == "pr"):
fvnm     =  "Precipitation rate"
uts      =  "mm day\u207b\u00b9"
vmax     =  36
vmin     =  -1
elif  (vnm  == "swnt"):
fvnm     =  "SWNT"
uts      =  "W m\u207b\u00b2"
vmax     =  400
vmin     =  50
elif  (vnm  == "lwnt"):
fvnm     =  "Outgoing longwave radiation"
uts      =  "W m\u207b\u00b2"
vmax     =  400
vmin     =  50
elif  (vnm  == "pw"):
fvnm     =  "Precipitable water"
uts      =  "mm"
vmax     =  90
vmin     =  0

print("   {0:s}".format(fvnm))

ofn         =  "reg.avg.{0:s}.{1:s}".format(vnm,fext)
ofp         =  "{0:s}/{1:s}".format(odir,ofn)

# container for stats
# min, max, mean, std, median
var_stats   =  np.empty((regs,entries,5))

for r in range(regs):

reg      =  reglist[r]

col      =  rclist [r][0]
row      =  rclist [r][1]

mt_arr   =  []

for m in range(entries):

model =  models[m]
isres =  isress[m]
osres =  osress[m]
color =  clist [m]
zodr  =  zolist[m]
lw    =  lwlist[m]
mfnm  =  modfnm[m]

if    (model == "obs" and vnm == "pr"):
mfnm     =  "IMERG 0.1\u00b0"
elif  (model == "obs" and vnm == "pw"):
mfnm     =  "MIMIC TPW2"
elif  (model == "obs" and vnm in ["lwnt","swnt"]):
mfnm     =  "CERES 1.0\u00b0"
isres    =  "od"
osres    =  "od"

if    (reg == "amz"):
lsm_ifn  =  "lsm.amz.{0:s}.nc".format(osres)
tlbl     =  "Amazon biome"
mskv     =  1
elif  (reg == "pco"):
lsm_ifn  =  "lsm.pco.{0:s}.nc".format(osres)
tlbl     =  "Pacific ocean"
mskv     =  1
elif  (reg == "afr"):
lsm_ifn  =  "lsm.afr.{0:s}.nc".format(osres)
tlbl     =  "African continent"
mskv     =  1
elif  (reg == "ino"):
lsm_ifn  =  "lsm.ino.{0:s}.nc".format(osres)
tlbl     =  "Indian ocean"
mskv     =  1
elif  (reg == "lnd"):
lsm_ifn  =  "lsm.ocn1.lnd0.10sn.{0:s}.nc".format(osres)
tlbl     =  "Land only (global)"
mskv     =  0
elif  (reg == "ocn"):
lsm_ifn  =  "lsm.ocn1.lnd0.10sn.{0:s}.nc".format(osres)
tlbl     =  "Ocean only (global)"
mskv     =  1

lsm_ifp     =  "{0:s}/{1:s}".format(idir,lsm_ifn)
lsm_id      =  ds("{0:s}".format(lsm_ifp))

lsm_id.set_auto_mask(False)

ilsm        =  lsm_id["lsm"][:]

print("  region : {0:20s} | model : {1:12s}".format(tlbl,mfnm))

ifn         =  "{0:s}.{1:s}.{2:s}.10sn.{3:s}.{4:s}.nc".format(model,isres,"all",osres,tres)
ifp         =  "{0:s}/{1:s}".format(idir,ifn)

fld_id      =  ds("{0:s}".format(ifp))

ilat        =  fld_id["lat"][:]
ilon        =  fld_id["lon"][:]

if (model == "grist"):
ivar     =  fld_id[vnm]  [24:]
idx      =  np.where((ilsm[24:] == mskv) & (ivar >= 0))
#idx      =  np.where(ilsm[24:] == mskv)
else:
ivar     =  fld_id[vnm]  [:]
idx      =  np.where((ilsm == mskv) &  (ivar >= 0))
#idx      =  np.where(ilsm == mskv)

sel_dat     =  ivar[idx].compressed()
mt_arr.append(sel_dat)

var_stats[r,m,0]   =  np.min   (sel_dat)
var_stats[r,m,1]   =  np.max   (sel_dat)
var_stats[r,m,2]   =  np.std   (sel_dat)
var_stats[r,m,3]   =  np.mean  (sel_dat)
var_stats[r,m,4]   =  np.median(sel_dat)

vio_parts      =  axs[col,row].violinplot(mt_arr,positions=pos,showmeans=True,showmedians=True,widths=0.8)

np.save(ofp,vio_parts)

for comp, coll in vio_parts.items():
if  (comp == "bodies"):
for pc, co in zip(coll, nums):
pc.set_linestyle(lslist[co])
pc.set_facecolor(clist[co])
pc.set_edgecolor(clist[co])

elif  (comp == "cmedians"):
coll.set_color(clist)
coll.set_linestyle(":")

else:
coll.set_color(clist)

axs[col,row].set_xticks([],[])
axs[col,row].grid()
axs[col,row].set_title("{0:s}".format(tlbl))
#axs[col,row].set_ylabel("{0:s} ({1:s})".format(fvnm,uts))
#axs[col,row].set_yscale("log")
axs[col,row].set_ylim(vmin,vmax)

lsm_id.close()
fld_id.close()

axs[0,0].set_ylabel("{0:s} ({1:s})".format(fvnm,uts))
axs[1,0].set_ylabel("{0:s} ({1:s})".format(fvnm,uts))
axs[2,0].set_ylabel("{0:s} ({1:s})".format(fvnm,uts))

# displaying statistics on screen
for r in range(regs):
#for r in range(0,1):
model_var   =  var_stats[r]
reg         =  reglist[r]

for m in range(entries):
mfnm     =  modfnm   [m]
min_val  =  model_var[m,0]
max_val  =  model_var[m,1]
std_val  =  model_var[m,2]
avg_val  =  model_var[m,3]
med_val  =  model_var[m,4]

print(
"{0:s} | {1:20s} | {2:15s} | ".format(reg,fvnm,mfnm),
"max = {0:7.2f} {1:s} | ".format(max_val,uts),
"min = {0:7.2f} {1:s} | ".format(min_val,uts),
"std = {0:7.2f} {1:s} | ".format(std_val,uts),
"avg = {0:7.2f} {1:s} | ".format(avg_val,uts),
"med = {0:7.2f} {1:s} | ".format(med_val,uts),
)

print("")

# labeling parts
for m in range(entries):
mfnm     =  modfnm[m]
co       =  clist [m]

if    (mfnm == "Observation" and vnm == "pw"):
mfnm  =  "MIMIC-TPW2"
elif  (mfnm == "Observation" and vnm == "pr"):
mfnm  =  "IMERG V06"
elif  (mfnm == "Observation" and vnm == "lwnt"):
mfnm  =  "CERES 1.0\u00b0"

#axs[2,1].scatter(zolist,np.ones(entries) * -100,label=mfnm,alpha=0.8,c=co)
axs[2,1].plot(zolist,np.ones(entries) * -100,label=mfnm,alpha=0.8,c=co)

axs[2,1].legend(fontsize=10,bbox_to_anchor=(0.9, -0.10),ncol=7)
plt.subplots_adjust(left=0.067,right=0.99,bottom=0.09,top=0.97,hspace=0.15,wspace=0.15)

if (dosavefig):
plt.savefig("{0:s}".format(ofp))
else:
plt.show()
  • Short description of the input files
The input files are netCDF4 files that are about 1GB each, model datasets showing different atmospheric fields such as longwave radiation, precipitation rates, etc. The each field's data dimension is (time, latitude, longitude) and their size is (960,81.1440). Jeder Datenpunkt ist daraus, wie sich die Modelldatensätze voneinander unterscheiden. Nein, nein, ich kann Datenpunkte nicht abschneiden. Das ist in Ordnung, aber ich möchte es, damit ich die Diagramme (Grenzweißräume, Schriftarten usw.) optimieren kann, ohne den 2 -Stunden -Code jedes Mal mit geringfügigen Figurenanpassungen ausführen zu müssen. Ich denke, es wäre ideal für mich, die Geigenplotobjekte irgendwie zu speichern, die dann ein separates Skript schreiben kann, um sie zu planen. Objekte. < /p>

Was ich mit < /li>
< />
mit den gespeicherten Geigenplotobjekten aus irgendeinem Grund nicht zu tun habe, kann ich den Rest der 'Tweaking' (von Zeile 201 bis Ende des Drehbuchs) nicht verwenden. Wenn ich die Datei .npy lade, erhalte ich die folgende Ausgabe aus der print ()
{'bodies': [, , , , , , , , , , , , , , ], 'cmeans': , 'cmaxes': , 'cmins': , 'cbars': , 'cmedians': }
< /code>
Ich denke, dieses Objekt ist in Form von Python -Wörterbuch, aber ich kann nicht auf die Elemente des obigen Objekts zugreifen. />
Thanks.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post