Übersicht_Hydraulikkreise
Bibliotheken importieren
# Name des aktuellen Notebooks für die exportierten Datein
file_name = "Uebersicht_Lueftung_Sommer_Winter"
# Ordner auf dem Server (nach files/)
ftp_folder = 'Notebooks/Auswertung'
## Bibliotheken, Module und Text- bzw- Grafikformatierungen aus zentraler Datei laden
%run ../Template/libraries_and_styles.ipynb
## Warum auch immer muss rcParams.update() in eine eigene Zelle...
mpl.rcParams.update(params)
import mpld3
from mpld3 import plugins
from mpld3.utils import get_id
import collections
# https://stackoverflow.com/questions/50806166/pandas-dataframe-getting-average-value-for-each-monday-1-am
# https://stackoverflow.com/questions/52297501/how-to-plot-uncertainty-bounds-of-a-set-of-curves-where-each-curve-has-inconsist
# # %matplotlib notebook
# sys.path
# sys.path.insert(0,'c:\\users\\kolja\\appdata\local\\programs\\python\\python37\\lib\\site-packages\\plot')
# sys.path
Daten Import
daten = pd.read_csv('../1_Daten/Arbeitsdaten/Daten_15s.csv')
daten["Zeit"] = pd.to_datetime(daten["Zeit"],dayfirst=True)
daten.set_index(['Zeit'], inplace=True)
daten_tgl = daten
daten_tgl['L_Zuluft_VPunkt'] = daten_tgl['L_Zuluft_1_VPunkt'] + daten_tgl['L_Zuluft_2_VPunkt'] + daten_tgl['L_Zuluft_3_VPunkt']
## tägliche Mittelwerte
daten_tgl = daten_tgl.loc['2017-05-01':'2018-04-30'].resample('1D').mean()
fig, ax = plt.subplots()
## Linien
daten_tgl['L_Zuluft_1_VPunkt'].plot(ax=ax,color=colo('rot',1), linewidth=0.5, label = 'Zuluft Sem1')
daten_tgl['L_Zuluft_2_VPunkt'].plot(ax=ax,color=colo('grün',1), linewidth=0.5, label = 'Zuluft Sem2')
daten_tgl['L_Zuluft_3_VPunkt'].plot(ax=ax,color=colo('blau',1), linewidth=0.5, label = 'Zuluft Flur')
daten_tgl['L_Zuluft_VPunkt'].plot(ax=ax,color=colo('orange',1), linewidth=0.5, label = 'Zuluft gesamt')
## Achsen & Legende
ax.set_ylabel(r'\textbf{Volumenstrom} (m\textsuperscript{3}/h)')
ax.set(ylim=0)
ax.set_xlabel('')
ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=4, loc=1)
set_legend_linewidth(legend)
ax.set_title('tägliche Mittelwerte')
## X Achse mit Monaten und 2 mal dem Jahr :-)
monthlyX(ax)
# plt.savefig(output_folder + '/' + file_name + '_Volumenstroeme_tgl_mittel.pdf')
daten_tgl = daten
daten_tgl['L_Zuluft_VPunkt'] = daten_tgl['L_Zuluft_1_VPunkt'] + daten_tgl['L_Zuluft_2_VPunkt'] + daten_tgl['L_Zuluft_3_VPunkt']
## tägliche Medianwerte
daten_tgl = daten_tgl.loc['2017-05-01':'2018-04-30'].resample('1D').median()
fig, ax = plt.subplots()
## Linien
daten_tgl['L_Zuluft_1_VPunkt'].plot(ax=ax,color=colo('rot',1), linewidth=0.5, label = 'Zuluft Sem1')
daten_tgl['L_Zuluft_2_VPunkt'].plot(ax=ax,color=colo('grün',1), linewidth=0.5, label = 'Zuluft Sem2')
daten_tgl['L_Zuluft_3_VPunkt'].plot(ax=ax,color=colo('blau',1), linewidth=0.5, label = 'Zuluft Flur')
daten_tgl['L_Zuluft_VPunkt'].plot(ax=ax,color=colo('orange',1), linewidth=0.5, label = 'Zuluft gesamt')
## Achsen & Legende
ax.set_ylabel(r'\textbf{Volumenstrom} (m\textsuperscript{3}/h)')
ax.set(ylim=0)
ax.set_xlabel('')
ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=4, loc=1)
set_legend_linewidth(legend)
ax.set_title('tägliche Medianwerte')
## X Achse mit Monaten und 2 mal dem Jahr :-)
monthlyX(ax)
# plt.savefig(output_folder + '/' + file_name + '_Volumenstroeme_tgl_median.pdf')
daten_tgl = daten
daten_tgl['L_Zuluft_VPunkt'] = daten_tgl['L_Zuluft_1_VPunkt'] + daten_tgl['L_Zuluft_2_VPunkt'] + daten_tgl['L_Zuluft_3_VPunkt']
## tägliche Maximalwerte
daten_tgl = daten_tgl.loc['2017-05-01':'2018-04-30'].resample('1D').max()
fig, ax = plt.subplots()
## Linien
daten_tgl['L_Zuluft_1_VPunkt'].plot(ax=ax,color=colo('rot',1), linewidth=0.5, label = 'Zuluft Sem1')
daten_tgl['L_Zuluft_2_VPunkt'].plot(ax=ax,color=colo('grün',1), linewidth=0.5, label = 'Zuluft Sem2')
daten_tgl['L_Zuluft_3_VPunkt'].plot(ax=ax,color=colo('blau',1), linewidth=0.5, label = 'Zuluft Flur')
daten_tgl['L_Zuluft_VPunkt'].plot(ax=ax,color=colo('orange',1), linewidth=0.5, label = 'Zuluft gesamt')
## Achsen & Legende
ax.set_ylabel(r'\textbf{Volumenstrom} (m\textsuperscript{3}/h)')
ax.set(ylim=0)
ax.set_xlabel('')
ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=4, loc=1)
set_legend_linewidth(legend)
ax.set_title('tägliche Maximalwerte')
## X Achse mit Monaten und 2 mal dem Jahr :-)
monthlyX(ax)
# plt.savefig(output_folder + '/' + file_name + '_Volumenstroeme_tgl_max.pdf')
#plt.ioff()
# plt.ion()
daten_tgl = daten
daten_tgl['L_Zuluft_VPunkt'] = daten_tgl['L_Zuluft_1_VPunkt'] + daten_tgl['L_Zuluft_2_VPunkt'] + daten_tgl['L_Zuluft_3_VPunkt']
## tägliche Maximalwerte
daten_tgl = daten_tgl.loc['2017-05-01':'2018-04-30'].resample('1D').min()
fig, ax = plt.subplots()
## Linien
daten_tgl['L_Zuluft_1_VPunkt'].plot(ax=ax,color=colo('rot',1), linewidth=0.5, label = 'Zuluft Sem1')
daten_tgl['L_Zuluft_2_VPunkt'].plot(ax=ax,color=colo('grün',1), linewidth=0.5, label = 'Zuluft Sem2')
daten_tgl['L_Zuluft_3_VPunkt'].plot(ax=ax,color=colo('blau',1), linewidth=0.5, label = 'Zuluft Flur')
daten_tgl['L_Zuluft_VPunkt'].plot(ax=ax,color=colo('orange',1), linewidth=0.5, label = 'Zuluft gesamt')
## Achsen & Legende
ax.set_ylabel(r'\textbf{Volumenstrom} (m\textsuperscript{3}/h)')
ax.set(ylim=0)
ax.set_xlabel('')
ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=4, loc=1)
set_legend_linewidth(legend)
ax.set_title('tägliche Minimalwerte')
## X Achse mit Monaten und 2 mal dem Jahr :-)
monthlyX(ax)
# plt.savefig(output_folder + '/' + file_name + '_Volumenstroeme_tgl_min.pdf')
Analyse - Jahr
sample = '15s'
vol = daten['2017-05-01':'2018-04-30'].resample(sample).mean()
vol['L_Zuluft_VPunkt'] = vol['L_Zuluft_1_VPunkt'] + vol['L_Zuluft_2_VPunkt'] + vol['L_Zuluft_3_VPunkt']
vol.dropna(inplace= True)
Berechnungen
## Anzahl der bins festlegen
binsNR = [*range(1, 61, 1)]
## bin_t = die Dauer, die jedes bin in Summe enthält
bin_t = pd.cut(vol['L_Zuluft_VPunkt'],60,labels=binsNR).value_counts().sort_index()
## intervall = das Intervall (von, bis] für jedes bin
values, interval = pd.cut(vol['L_Zuluft_VPunkt'],60,retbins=True)
## Mittelwerte des Intervalle berechnen
interval_m = []
for i in range(0, 60):
interval_m.append((interval[i] + interval[i+1])/2)
## df aus Dauer und Mittelwert
df = pd.DataFrame({'Dauer':(bin_t/240), 'V_Punkt':interval_m})
## Zeiten der drei Abschnitte berechnen
u = 0
for i in range(1, 13):
u = u + bin_t[i]
m = 0
for i in range(13, 37):
m = m + bin_t[i]
o = 0
for i in range(37, 61):
o = o + bin_t[i]
Summe1 = bin_t.sum()/240
Summe2 = (u+m+o)/240
t_u = u/240
t_m = m/240
t_o = o/240
## mittlerer Volumenstrom eines jeden Abschnittes
## relativen Anteil berechnen
faktor = []
for i in range(1, 13):
faktor.append(bin_t[i] / u)
for i in range(13, 37):
faktor.append(bin_t[i] / m)
for i in range(37, 61):
faktor.append(bin_t[i] / o)
df['faktor'] = faktor
## Volumenstrom * relativer Anteil
df['V_mittel'] = df.V_Punkt * faktor
## Abschnitte aufsummieren
V_m_u = df.loc[1:12]['V_mittel'].sum()
V_m_m = df.loc[13:36]['V_mittel'].sum()
V_m_o = df.loc[37:60]['V_mittel'].sum()
## Ausgabe
print(f'Kontrolle: {Summe1 - Summe2}')
print(f'unten Dauer: {round(t_u,1)} h, durschn. Volumenstrom: {round(V_m_u,1)}m³')
print(f'mitte Dauer: {round(t_m,1)} h, durschn. Volumenstrom: {round(V_m_m,1)}m³')
print(f'oben Dauer : {round(t_o,1)} h, durschn. Volumenstrom: {round(V_m_o,1)}m³')
# display(df.head())
# display(df.tail())
# interval
Kontrolle: 0.0
unten Dauer: 3137.5 h, durschn. Volumenstrom: 169.6m³
mitte Dauer: 1950.8 h, durschn. Volumenstrom: 847.7m³
oben Dauer : 3613.4 h, durschn. Volumenstrom: 1483.0m³
Plot Histogramm - gesamt
## Histo
bins = 60
oben = 36
unten = 12
plt.figure(figsize=(2.78,2.05))
N, bins, patches = plt.hist(vol['L_Zuluft_VPunkt'], bins=bins, orientation="horizontal", label='Value')
plt.hist(vol['L_Zuluft_VPunkt'], bins=bins, orientation="horizontal", label='Value', edgecolor='black', linewidth=.4, histtype='step')
## die drei Bereiche einfärben, Füllung und Rahmen
for i in range(0,unten):
patches[i].set_facecolor(colo('grün',.6))
patches[i].set_edgecolor(colo('grün',.6))
for i in range(unten,oben):
patches[i].set_facecolor(colo('grün',1))
patches[i].set_edgecolor(colo('grün',1))
for i in range(oben,60):
patches[i].set_facecolor(colo('grün',1.6))
patches[i].set_edgecolor(colo('grün',1.6))
## notwendig um die Achsen der Figur zu bekommen
ax = plt.gca()
## Label für Legende
top = mpatches.Patch(facecolor =colo('grün',1.6), edgecolor='black', label=r'$1.179 - 1.891$')
center = mpatches.Patch(facecolor =colo('grün',1), edgecolor='black', label='') #r'$\dot V \hspace{0.38cm} 500 - 1.000$')
bottom = mpatches.Patch(facecolor =colo('grün',.6), edgecolor='black', label='') #r'$\dot V \hspace{0.74cm} 0 - \hspace{0.25cm} 500$')
## \hphantom{} funktioniert nicht in der Legende bzw. nicht vor dem ersten sichtbaren Zeichen, daher die Notlösung mit .text()
ax.text(.646, 458, r'$468 - 1.150$', transform=ax.get_yaxis_transform())
ax.text(.65, 265, r'$110 - \hphantom{1.}438$', transform=ax.get_yaxis_transform())
## Legende
legend = plt.legend(handles=[top,center,bottom],loc='lower right', bbox_to_anchor=(1., .06))
set_legend_linewidth(legend)
## Hintergrund der Legende transparent, damit der Text sichtbar wird ;-)
legend.get_frame().set_alpha(None)
legend.get_frame().set_facecolor((0, 0, 0, 0))
## Y Achse formatieren
ax.set(ylim=[0,1900])
## Ticks sind Mittelwerte des jeweiligen Abteils
ax.set_yticks([V_m_u, V_m_m,V_m_o])
# ax.set_ylabel(r'\textbf{Volumenstrom} ($m^3/h$)')
ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
## X Achse skalieren mit dem Faktir 1/240, damit die 15s in Stunden abgebildet werden
ax.set_xlabel(r'\textbf{Zeit} (h)')
ax.set(xlim=[0,500000])
ax.set_xticks([0,120000, 240000,360000,480000])
x_vals = ax.get_xticks()
ax.set_xticklabels(['{:3.0f}%'.format(x / 240) for x in x_vals])
## remove minorticks
plt.tick_params(axis='x', which='minor', bottom=False)
## Stundenwerte
ax.text(.23, 265, r'$3.140 h$', transform=ax.get_yaxis_transform())
ax.text(.23, 820, r'$2.055 h$', transform=ax.get_yaxis_transform())
ax.text(.23, 1570, r'$3.505 h$', transform=ax.get_yaxis_transform())
plt.savefig(output_folder + '/' + file_name + '_Volumenstroeme_Histogramm_gesamt.pdf')
plt.show()
Plot Histogramm - einzeln
daten_std = daten.resample('15s').mean()#.reset_index()
daten_std['L_Zuluft_VPunkt'] = daten_std['L_Zuluft_1_VPunkt'] + daten_std['L_Zuluft_2_VPunkt'] + daten_std['L_Zuluft_3_VPunkt']
daten_std['L_Zuluft_VPunkt'].isna().sum()
bins = 40
fig, ax = plt.subplots(nrows=3, ncols=1, sharex=True , constrained_layout=False,figsize=(3,2.05))
plt.subplots_adjust(hspace=.0)
# plt.hist(daten_std['L_Zuluft_VPunkt'], bins=100, orientation="horizontal", color=colo('orange',1), linewidth=0.5, label = 'Zuluft gesamt')
daten_std['L_Zuluft_1_VPunkt'].plot.hist(ax=ax[0], bins=bins, orientation="horizontal", color=colo('rot',1), linewidth=0.4, edgecolor='black', label = 'Seminar 1', histtype='stepfilled')
daten_std['L_Zuluft_1_VPunkt'].plot.hist(ax=ax[0], bins=bins, orientation="horizontal", color=colo('black',1), linewidth=0.3, label = '_nolegend_', histtype='step')
daten_std['L_Zuluft_2_VPunkt'].plot.hist(ax=ax[1], bins=bins, orientation="horizontal", color=colo('orange',1), linewidth=0.4, edgecolor='black', label = 'Seminar 2', histtype='stepfilled')
daten_std['L_Zuluft_2_VPunkt'].plot.hist(ax=ax[1], bins=bins, orientation="horizontal", color=colo('black',1), linewidth=0.4, label = '_nolegend_', histtype='step')
daten_std['L_Zuluft_3_VPunkt'].plot.hist(ax=ax[2], bins=bins, orientation="horizontal", color=colo('blau',1), linewidth=0.4, edgecolor='black', label = 'Flur', histtype='stepfilled')
daten_std['L_Zuluft_3_VPunkt'].plot.hist(ax=ax[2], bins=bins, orientation="horizontal", color=colo('black',1), linewidth=0.4, label = '_nolegend_', histtype='step')
# W_raus.plot.barh(position = 1.5, color = (Farben_raus), edgecolor='black',linewidth = 0.3, width = 0.5, ax = ax, stacked = True, alpha = 1,align='edge')
## Legende
h0, l0 = ax[0].get_legend_handles_labels()
h2, l2 = ax[1].get_legend_handles_labels()
h4, l4 = ax[2].get_legend_handles_labels()
legend = plt.legend(h0+h2+h4, l0+l2+l4, loc='lower right', ncol=1, bbox_to_anchor=(1., .14))
set_legend_linewidth(legend)
# legend.get_frame().set_linewidth(0.3)
## Grenzen und Ticks
# ax[0].set(xlim=[0,2000])
# ax[1].set(xlim=[0,2000])
# ax[2].set(xlim=[0,2000])
ax[0].set(ylim=[0,1400])
ax[1].set(ylim=[0,180])
ax[2].set(ylim=[0,500])
ax[0].set_yticks([0,595])
ax[1].set_yticks([0,104])
ax[2].set_yticks([0,141])
## Beschriftung Y Achse
ax[0].set_xlabel('')
ax[1].set_xlabel('')
ax[2].set_xlabel(r'\textbf{Zeit} (h)')
## Tausendertrennzeichen
ax[0].get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
ax[1].get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
ax[2].get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
ax[0].get_xaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
ax[1].get_xaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
ax[2].get_xaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
## X Achse skalieren mit dem Faktir 1/240, damit die 15s in Stunden abgebildet werden
ax[0].set_xticks([0,120000, 240000,360000,480000])
x_vals = ax[0].get_xticks()
ax[0].set_xticklabels(['{:3.0f}%'.format(x / 240) for x in x_vals])
## remove minorticks
plt.tick_params(axis='x', which='minor', bottom=False)
## Beschriftungen Y Achse
ax[0].text(-0.28, -800, r'\textbf{Volumenstrom} ($m^3/h$)', va='center', rotation='vertical', transform=ax[0].get_yaxis_transform())
## Save
plt.savefig(output_folder + '/' + file_name + '_Volumenstroeme_Histogramm.pdf', bbox_inches='tight')
print(f'Seminar 1: {round(daten_std.L_Zuluft_1_VPunkt.mean(),1)}')
print(f'Seminar 2: {round(daten_std.L_Zuluft_2_VPunkt.mean(),1)}')
print(f'Flur: {round(daten_std.L_Zuluft_3_VPunkt.mean(),1)}')
Seminar 1: 618.2
Seminar 2: 103.8
Flur: 142.6
Analyse - Sommer
sample = '15s'
vol = daten['2017-07-01':'2017-08-30'].resample(sample).mean()
vol['L_Zuluft_VPunkt'] = vol['L_Zuluft_1_VPunkt'] + vol['L_Zuluft_2_VPunkt'] + vol['L_Zuluft_3_VPunkt']
vol.dropna(inplace= True)
Berechnungen
## Anzahl der bins festlegen
binsNR = [*range(1, 61, 1)]
## bin_t = die Dauer, die jedes bin in Summe enthält
bin_t = pd.cut(vol['L_Zuluft_VPunkt'],60,labels=binsNR).value_counts().sort_index()
## intervall = das Intervall (von, bis] für jedes bin
values, interval = pd.cut(vol['L_Zuluft_VPunkt'],60,retbins=True)
## Mittelwerte des Intervalle berechnen
interval_m = []
for i in range(0, 60):
interval_m.append((interval[i] + interval[i+1])/2)
## df aus Dauer und Mittelwert
df = pd.DataFrame({'Dauer':(bin_t/240), 'V_Punkt':interval_m})
## Zeiten der drei Abschnitte berechnen
u = 0
for i in range(1, 13):
u = u + bin_t[i]
m = 0
for i in range(13, 37):
m = m + bin_t[i]
o = 0
for i in range(37, 61):
o = o + bin_t[i]
Summe1 = bin_t.sum()/240
Summe2 = (u+m+o)/240
t_u = u/240
t_m = m/240
t_o = o/240
## mittlerer Volumenstrom eines jeden Abschnittes
## relativen Anteil berechnen
faktor = []
for i in range(1, 13):
faktor.append(bin_t[i] / u)
for i in range(13, 37):
faktor.append(bin_t[i] / m)
for i in range(37, 61):
faktor.append(bin_t[i] / o)
df['faktor'] = faktor
## Volumenstrom * relativer Anteil
df['V_mittel'] = df.V_Punkt * faktor
## Abschnitte aufsummieren
V_m_u = df.loc[1:12]['V_mittel'].sum()
V_m_m = df.loc[13:36]['V_mittel'].sum()
V_m_o = df.loc[37:60]['V_mittel'].sum()
## Ausgabe
print(f'Kontrolle: {Summe1 - Summe2}')
print(f'unten Dauer: {round(t_u,1)} h, durschn. Volumenstrom: {round(V_m_u,1)}m³')
print(f'mitte Dauer: {round(t_m,1)} h, durschn. Volumenstrom: {round(V_m_m,1)}m³')
print(f'oben Dauer : {round(t_o,1)} h, durschn. Volumenstrom: {round(V_m_o,1)}m³')
# display(df.head())
# display(df.tail())
# interval
Kontrolle: 0.0
unten Dauer: 1404.9 h, durschn. Volumenstrom: 156.0m³
mitte Dauer: 23.5 h, durschn. Volumenstrom: 929.4m³
oben Dauer : 25.2 h, durschn. Volumenstrom: 1391.2m³
Plot Histogramm - gesamt
## Histo
bins = 60
oben = 36
unten = 12
plt.figure(figsize=(2.78,2.05))
N, bins, patches = plt.hist(vol['L_Zuluft_VPunkt'], bins=bins, orientation="horizontal", label='Value')
plt.hist(vol['L_Zuluft_VPunkt'], bins=bins, orientation="horizontal", label='Value', edgecolor='black', linewidth=.4, histtype='step')
## die drei Bereiche einfärben, Füllung und Rahmen
for i in range(0,unten):
patches[i].set_facecolor(colo('grün',.6))
patches[i].set_edgecolor(colo('grün',.6))
for i in range(unten,oben):
patches[i].set_facecolor(colo('grün',1))
patches[i].set_edgecolor(colo('grün',1))
for i in range(oben,60):
patches[i].set_facecolor(colo('grün',1.6))
patches[i].set_edgecolor(colo('grün',1.6))
## notwendig um die Achsen der Figur zu bekommen
ax = plt.gca()
## Label für Legende
top = mpatches.Patch(facecolor =colo('grün',1.6), edgecolor='black', label=r'$1.179 - 1.891$')
center = mpatches.Patch(facecolor =colo('grün',1), edgecolor='black', label='') #r'$\dot V \hspace{0.38cm} 500 - 1.000$')
bottom = mpatches.Patch(facecolor =colo('grün',.6), edgecolor='black', label='') #r'$\dot V \hspace{0.74cm} 0 - \hspace{0.25cm} 500$')
## \hphantom{} funktioniert nicht in der Legende bzw. nicht vor dem ersten sichtbaren Zeichen, daher die Notlösung mit .text()
ax.text(.646, 458, r'$468 - 1.150$', transform=ax.get_yaxis_transform())
ax.text(.65, 265, r'$110 - \hphantom{1.}438$', transform=ax.get_yaxis_transform())
## Legende
legend = plt.legend(handles=[top,center,bottom],loc='lower right', bbox_to_anchor=(1., .06))
set_legend_linewidth(legend)
## Hintergrund der Legende transparent, damit der Text sichtbar wird ;-)
legend.get_frame().set_alpha(None)
legend.get_frame().set_facecolor((0, 0, 0, 0))
## Y Achse formatieren
# ax.set(ylim=[0,1900])
## Ticks sind Mittelwerte des jeweiligen Abteils
# ax.set_yticks([V_m_u, V_m_m,V_m_o])
# ax.set_ylabel(r'\textbf{Volumenstrom} ($m^3/h$)')
ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
## X Achse skalieren mit dem Faktor 1/240, damit die 15s in Stunden abgebildet werden
ax.set_xlabel(r'\textbf{Zeit} (h)')
# ax.set(xlim=[0,500000])
# ax.set_xticks([0,120000, 240000,360000,480000])
x_vals = ax.get_xticks()
ax.set_xticklabels(['{:3.0f}%'.format(x / 240) for x in x_vals])
## remove minorticks
plt.tick_params(axis='x', which='minor', bottom=False)
## Stundenwerte
ax.text(.23, 265, r'$3.140 h$', transform=ax.get_yaxis_transform())
ax.text(.23, 820, r'$2.055 h$', transform=ax.get_yaxis_transform())
ax.text(.23, 1570, r'$3.505 h$', transform=ax.get_yaxis_transform())
plt.savefig(output_folder + '/' + file_name + '_Volumenstroeme_Histogramm_gesamt.pdf')
plt.show()
Plot Histogramm - einzeln
sample = '15s'
daten_std = daten['2017-07-01':'2017-08-30'].resample(sample).mean()
daten_std['L_Zuluft_VPunkt'] = daten_std['L_Zuluft_1_VPunkt'] + daten_std['L_Zuluft_2_VPunkt'] + daten_std['L_Zuluft_3_VPunkt']
daten_std['L_Zuluft_VPunkt'].isna().sum()
vol.dropna(inplace= True)
bins = 40
fig, ax = plt.subplots(nrows=3, ncols=1, sharex=True , constrained_layout=False,figsize=(3,2.05))
plt.subplots_adjust(hspace=.0)
# plt.hist(daten_std['L_Zuluft_VPunkt'], bins=100, orientation="horizontal", color=colo('orange',1), linewidth=0.5, label = 'Zuluft gesamt')
daten_std['L_Zuluft_1_VPunkt'].plot.hist(ax=ax[0], bins=bins, orientation="horizontal", color=colo('rot',1), linewidth=0.4, edgecolor='black', label = 'Seminar 1', histtype='stepfilled')
daten_std['L_Zuluft_1_VPunkt'].plot.hist(ax=ax[0], bins=bins, orientation="horizontal", color=colo('black',1), linewidth=0.3, label = '_nolegend_', histtype='step')
daten_std['L_Zuluft_2_VPunkt'].plot.hist(ax=ax[1], bins=bins, orientation="horizontal", color=colo('orange',1), linewidth=0.4, edgecolor='black', label = 'Seminar 2', histtype='stepfilled')
daten_std['L_Zuluft_2_VPunkt'].plot.hist(ax=ax[1], bins=bins, orientation="horizontal", color=colo('black',1), linewidth=0.4, label = '_nolegend_', histtype='step')
daten_std['L_Zuluft_3_VPunkt'].plot.hist(ax=ax[2], bins=bins, orientation="horizontal", color=colo('blau',1), linewidth=0.4, edgecolor='black', label = 'Flur', histtype='stepfilled')
daten_std['L_Zuluft_3_VPunkt'].plot.hist(ax=ax[2], bins=bins, orientation="horizontal", color=colo('black',1), linewidth=0.4, label = '_nolegend_', histtype='step')
# W_raus.plot.barh(position = 1.5, color = (Farben_raus), edgecolor='black',linewidth = 0.3, width = 0.5, ax = ax, stacked = True, alpha = 1,align='edge')
## Legende
h0, l0 = ax[0].get_legend_handles_labels()
h2, l2 = ax[1].get_legend_handles_labels()
h4, l4 = ax[2].get_legend_handles_labels()
legend = plt.legend(h0+h2+h4, l0+l2+l4, loc='lower right', ncol=1, bbox_to_anchor=(1., .14))
set_legend_linewidth(legend)
# legend.get_frame().set_linewidth(0.3)
## Grenzen und Ticks
# ax[0].set(xlim=[0,2000])
# ax[1].set(xlim=[0,2000])
# ax[2].set(xlim=[0,2000])
# ax[0].set(ylim=[0,1400])
# ax[1].set(ylim=[0,180])
# ax[2].set(ylim=[0,500])
# ax[0].set_yticks([0,595])
# ax[1].set_yticks([0,104])
# ax[2].set_yticks([0,141])
## Beschriftung Y Achse
ax[0].set_xlabel('')
ax[1].set_xlabel('')
ax[2].set_xlabel(r'\textbf{Zeit} (h)')
## Tausendertrennzeichen
ax[0].get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
ax[1].get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
ax[2].get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
ax[0].get_xaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
ax[1].get_xaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
ax[2].get_xaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
## X Achse skalieren mit dem Faktir 1/240, damit die 15s in Stunden abgebildet werden
ax[0].set_xticks([0,120000, 240000,360000,480000])
x_vals = ax[0].get_xticks()
ax[0].set_xticklabels(['{:3.0f}%'.format(x / 240) for x in x_vals])
## remove minorticks
plt.tick_params(axis='x', which='minor', bottom=False)
## Beschriftungen Y Achse
ax[0].text(-0.28, -800, r'\textbf{Volumenstrom} ($m^3/h$)', va='center', rotation='vertical', transform=ax[0].get_yaxis_transform())
## Save
plt.savefig(output_folder + '/' + file_name + '_Volumenstroeme_Histogramm.pdf', bbox_inches='tight')
print(f'Seminar 1: {round(daten_std.L_Zuluft_1_VPunkt.mean(),1)}')
print(f'Seminar 2: {round(daten_std.L_Zuluft_2_VPunkt.mean(),1)}')
print(f'Flur: {round(daten_std.L_Zuluft_3_VPunkt.mean(),1)}')
Seminar 1: 65.2
Seminar 2: 62.5
Flur: 57.6
Save & Upload
## Skriptlaufzeit Ende (Funktion in: libraries_and_styles.ipynb)
hours, minutes, seconds = laufzeit()
## Notebook speichern vor dem Upload (Funktion in: libraries_and_styles.ipynb)
save_notebook()
## Notebook als Markdown Datei mit eingebetten Grafiken speichern und auf den Server laden
%run ../Template/save_and_upload.ipynb
Analyse_RLT MCA_Speicherverluste