holzdeko / Boden Temperatur Feuchte.py
BorowyP
panel app
fd0472a
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 3 12:57:34 2023
@author: BorowyP
"""
import pandas as pd
import hvplot.pandas # Adds .hvplot and .interactive methods to Pandas dataframes
import panel as pn # Panel is a simple, flexible and enterprise-ready data app framework
import holoviews as hv
from holoviews.operation.timeseries import rolling, rolling_outlier_std
hv.extension('bokeh')
#pn.extension('tabulator')
pn.extension(sizing_mode="stretch_width")
#pd.set_option("precision", 0)
PALETTE = ["#ff6f69", "#ffcc5c", "#88d8b0", ]
import numpy as np
from bokeh.models.formatters import DatetimeTickFormatter
formatter = DatetimeTickFormatter(months='%b %Y') # wird in .hvplot benötigt für x-achse!
soil_temp = pd.read_csv('df_soil_temp.csv',header=0,sep=',')
soil_temp.index = pd.to_datetime(soil_temp['Date'], format='%Y.%m.%d %H:%M:%S')
soil_temp.index.names = ['Date']
soil_temp = soil_temp.drop(['Date'], axis=1)
soil_temp = soil_temp.drop(['Unnamed: 0'], axis=1)
soil_hum = pd.read_csv('df_soil_hum.csv',header=0,sep=',')
soil_hum.index = pd.to_datetime(soil_hum['Date'], format='%Y.%m.%d %H:%M:%S')
soil_hum.index.names = ['Date']
soil_hum = soil_hum.drop(['Date'], axis=1)
soil_hum = soil_hum.drop(['Unnamed: 0'], axis=1)
Stndrt = pn.widgets.RadioButtonGroup(name='Standort', options=['Glienig', 'Groß Liebitz', 'Krausnick', 'Halbe', 'Spreeau', 'Hangelsberg'],button_type='success')
soilhumbtn = pn.widgets.ToggleGroup(
name='soilhumidity',
options=['Prof100', 'Prof200', 'Prof300', 'Prof400', 'Prof600', 'Prof1000'],
value=['Prof100'],
button_type='success')
soiltempbtn = pn.widgets.ToggleGroup(
name='soiltemperature',
options=['Temp05', 'Temp10', 'Temp20', 'Temp30', 'Temp50', 'Temp100'],
value=['Temp05'],
button_type='success')
soil_date_slider = pn.widgets.DateRangeSlider(name='Date', start=soil_temp.index.min(), end=soil_temp.index.max())
soil_temp_i= soil_temp.interactive()
soil_temp_i = (
soil_temp_i[
(soil_temp_i.Standort == Stndrt) &
(soil_temp_i.index >= soil_date_slider.param.value_start) &
(soil_temp_i.index <= soil_date_slider.param.value_end)
]
)
soil_hum_i = soil_hum.interactive()
soil_hum_i = ( soil_hum_i[
(soil_hum_i.Standort == Stndrt) &
(soil_hum_i.index >= soil_date_slider.param.value_start) &
(soil_hum_i.index <= soil_date_slider.param.value_end) ])
soiltempplot = soil_temp_i.hvplot(x='Date',xlabel='Datum',title=Stndrt, y=soiltempbtn, color=PALETTE, line_width=1, xformatter=formatter, ylabel='Bodentemperatur [°C]')
soilhumplot = soil_hum_i.hvplot(x='Date',xlabel='Datum',title=Stndrt, y=soilhumbtn, color=PALETTE, line_width=1, xformatter=formatter, ylabel='Bodenfeuchte[%]')
soiltemp_box = soil_temp_i[['Temp05', 'Temp10', 'Temp20', 'Temp30', 'Temp50', 'Temp100']].fillna(0)
soiltemp_box_plot = soiltemp_box.hvplot(kind='box', legend=False, xlabel=Stndrt, ylabel='Bodentemperatur [°C]')
soilhum_box = soil_hum_i[['Prof100', 'Prof200', 'Prof300', 'Prof400', 'Prof600', 'Prof1000']].fillna(0)
soilhum_box_plot = soilhum_box.hvplot(kind='box', legend=False, xlabel=Stndrt, ylabel='Bodenfeuchte [%]')
hd_logo = pn.pane.PNG('HD_Logo.png', width=100)
hd_logo
lfe_logo = pn.pane.PNG('LFE_Logo.png', width=100)
fnr_logo = pn.pane.PNG('fnr_logo.png', width=100)
template = pn.template.FastListTemplate(
title='Holzdeko Dashboard',
sidebar=[hd_logo,
pn.pane.Markdown("## Einstellungen"),
'Standort',Stndrt,
lfe_logo,
fnr_logo
#'Boden',
#'Gekalkt/ungekalkt', yaxis,
],
main=[pn.pane.Markdown("## Boden"),
soiltempbtn,
soil_date_slider,
soiltempplot.panel(),
soiltemp_box_plot.panel(),
soilhumbtn,
soil_date_slider,
soilhumplot.panel(),
soilhum_box_plot.panel()
#accent_base_color="#88d8b0",
#header_background="#88d8b0",
])
template.servable();
#print('fertig!')
# To launch this dashboard as a web server, we can simply run
# cd C:\Users\BorowyP\Desktop\Dashboard-Preasi\soil_air\
# panel serve 20230303_soil_temp_hum_docker.ipynb --autoreload