In plaat van laatste tijdstap de laatste tijdstap met regen weergeven. Hiervoor hebben we al een script in een ander systeem, wellicht hebben we hier iets aan:
Input is:
r = GridH5ResultAdmin(h5_file, nc_file) #Inladen resultaten
conn = sqlite3.connect(folders_dict['sqlite']['sqlite_path'])
Conn (connectie naar sqlite) staat daar nog tussen maar is volgens mij niet nodig. Maar dan heb je iig een versie..
Script is:
`
from future import division
import pandas as pd
import matplotlib as mplt
import matplotlib.pyplot as plt
import numpy as np
def rain_properties(r, conn):
Lees uit een 3di resultaat de dag uit waarop de regen is begonnen, en geeindigd.
#dt van wegschrijven resultaten in minuten
dt = round(np.mean(np.diff(r.nodes.timestamps))/60,0)
# Index van tijdstappen van in de netcdf
timestep= r.nodes.timestamps/60 #Tijd in minuten sinds begin berekening
# De regen weggeschreven per uur
rain_1d = r.nodes.subset('1D_ALL').timeseries(indexes = slice(0, timestep.size, int(60/dt))).rain.tolist()
rain_2d = r.nodes.subset('2D_ALL').timeseries(indexes = slice(0, timestep.size, int(60/dt))).rain.tolist()
rain_1d = [x[0] for x in rain_1d] #Blijft raar in sublijsten staan ookal lezen we maar 1 node uit, dit haalt dat weg om er 1list van te maken
try: rain_2d = [x[0] for x in rain_2d]
except: rain_2d=0
if any(rain_1d):
rain = rain_1d
elif any(rain_2d):
rain = rain_2d
else:
print('Kon geen neerslag vinden')
#Wanneer de regen precies valt kunnen we afleiden uit de regendata.
#Dit gaat per dag, dus hieronder worden de dagen bepaald.
detected_rain = [i for i,e in enumerate(rain) if e >0.00001]
dagen_droog_begin = max(0, (detected_rain[0]-1)/24)
dagen_droog_eind = max(0, (len(rain)-detected_rain[-1]-1)/24)
# ------------------------------------------------------------------------------------------------------------------
# PLOTTING
# ------------------------------------------------------------------------------------------------------------------
print(
"""dagen_droog_begin = {} ({} uur)
dagen_droog_eind = {} ({} uur)
tijdstap_minuten = {}
""".format(round(dagen_droog_begin,3), dagen_droog_begin*24, dagen_droog_eind, dagen_droog_eind*24, dt )
)
def create_plot(x, y, title, xlabel, ylabel):
fig, ax = plt.subplots()
plt.plot(x,y)
plt.title(title)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
ax.grid();
return fig, ax
rain_plot = rain #Toevoegen zodat er rechte lijnen geplot worden
rain_plot.insert(detected_rain[-1], rain_plot[detected_rain[-1]])
rain_plot= rain_plot + [rain_plot[-1]]
# Plot de regen over de tijd
x_dagen =[0]+[x/24 for x in range(1,len(rain)-1)]
x_dagen_plot = x_dagen
x_dagen.insert(detected_rain[0]-1, x_dagen[detected_rain[0]-1])
x_dagen.insert(detected_rain[-1]+1, x_dagen[detected_rain[-1]+1])
create_plot(x_dagen, [a*100000/1.05833 for a in rain_plot], 'Neerslag', 'Tijd [dagen]', 'Neerslag [mm/dag]')
# Randen van gedetecteerde regen
plt.plot([dagen_droog_begin,dagen_droog_begin],[0,max(rain)*100000/1.05833], c='green')
plt.plot([timestep[-1]/60/24 - dagen_droog_eind,timestep[-1]/60/24 -dagen_droog_eind],[0,max(rain)*100000/1.05833], c='green')
# Polygon om deze gedeteceerde regenperiode te vullen
xy=[[dagen_droog_begin, 0], [timestep[-1]/60/24 - dagen_droog_eind, 0], [timestep[-1]/60/24 - dagen_droog_eind,max(rain)*100000/1.05833], [dagen_droog_begin,max(rain)*100000/1.05833]]
fig = plt.gcf()
ax = plt.gca()
ax.add_patch(mplt.patches.Polygon(xy, closed=True,alpha=0.2,color='green'))
plt.legend(('Neerslag','Gedetecteerde neerslagperiode'),loc='upper right',fancybox=True,framealpha=0.5);
# plt.show()
# fig.legend(['Neerslag','Gedetecteerde neerslagperiode'], bbox_to_anchor=(1, 1), bbox_transform=plt.gcf().transFigure)
# ------------------------------------------------------------------------------------------------------------------
# Tijdstappen dataframe aanmaken
# ------------------------------------------------------------------------------------------------------------------
T0 = np.argmax(timestep > 0)
T_begin_regen = np.argmax(timestep > dagen_droog_begin*24*60)
T_einde_regen_min1 = np.argmax(timestep > timestep[-1]-dagen_droog_eind*24*60 - 24*60) -1 #Een tijdstap voor het einde, omdat anders het water alweer uit zakt.
T_einde_regen = np.argmax(timestep > timestep[-1]-dagen_droog_eind*24*60) -1
T_einde_som = np.argmax(timestep == timestep[-1])
#De index van de tijdstappen die uitgelezen moeten worden in een lijst zetten.
tijdstappen_str = ['T0', 'T_begin_regen', 'T_einde_regen_min1', 'T_einde_regen', 'T_einde_som']
tijdstappen = [T0, T_begin_regen, T_einde_regen_min1, T_einde_regen, T_einde_som]
#En dan in een dataframe
tijdstappen = pd.DataFrame(data = [tijdstappen],columns=tijdstappen_str, index=['value'])
return dt, timestep, tijdstappen`
Hieruit moet het T einde regen min 1 gebruiken. Deze heeft zeker nog de hele tijdstap regen.
In plaat van laatste tijdstap de laatste tijdstap met regen weergeven. Hiervoor hebben we al een script in een ander systeem, wellicht hebben we hier iets aan:
Input is: r = GridH5ResultAdmin(h5_file, nc_file) #Inladen resultaten conn = sqlite3.connect(folders_dict['sqlite']['sqlite_path'])
Conn (connectie naar sqlite) staat daar nog tussen maar is volgens mij niet nodig. Maar dan heb je iig een versie..
Script is: ` from future import division import pandas as pd import matplotlib as mplt import matplotlib.pyplot as plt import numpy as np
def rain_properties(r, conn): Lees uit een 3di resultaat de dag uit waarop de regen is begonnen, en geeindigd.
Hieruit moet het T einde regen min 1 gebruiken. Deze heeft zeker nog de hele tijdstap regen.