holzdeko / Stahlrahmen.py
BorowyP
panel app
fd0472a
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 14 08:58:24 2023
@author: BorowyP
"""
import os
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import xarray as xr
import panel as pn
import panel.widgets as pnw
import hvplot.pandas
import hvplot.xarray
homefolder = os.getcwd()
os.chdir(homefolder)
def list_folder():
for i in range(len(os.listdir(os.getcwd()))):
print(str(i) + ' ' +str(os.listdir(os.getcwd())[i]))
def get_path(standort, k_nk, mA_oA):
os.chdir(homefolder),
os.chdir('Stahlrahmen-Fotos')
os.chdir(standort),
os.chdir(k_nk),
os.chdir(mA_oA)
return os.getcwd()
# create relative Path's to folder of directory
glienig_k_oA = get_path('Glienig', 'K', 'oA')
grliebitz_k_oA = get_path('GrLiebitz', 'K', 'oA')
krausnick_k_oA = get_path('Krausnick', 'K', 'oA')
halbe_k_oA = get_path('Halbe', 'K', 'oA')
spreeau_k_oA = get_path('Spreeau', 'K', 'oA')
hberg_k_oA = get_path('Hangelsberg', 'K', 'oA')
glienig_nk_oA = get_path('Glienig', 'nK', 'oA')
grliebitz_nk_oA = get_path('GrLiebitz', 'nK', 'oA')
krausnick_nk_oA = get_path('Krausnick', 'nK', 'oA')
halbe_nk_oA = get_path('Halbe', 'nK', 'oA')
spreeau_nk_oA = get_path('Spreeau', 'nK', 'oA')
hberg_nk_oA = get_path('Hangelsberg', 'nK', 'oA')
glienig_k_mA = get_path('Glienig', 'K', 'mA')
grliebitz_k_mA = get_path('GrLiebitz', 'K', 'mA')
krausnick_k_mA = get_path('Krausnick', 'K', 'mA')
halbe_k_mA = get_path('Halbe', 'K', 'mA')
spreeau_k_mA = get_path('Spreeau', 'K', 'mA')
hberg_k_mA = get_path('Hangelsberg', 'K', 'mA')
glienig_nk_mA = get_path('Glienig', 'nK', 'mA')
grliebitz_nk_mA = get_path('GrLiebitz', 'nK', 'mA')
krausnick_nk_mA = get_path('Krausnick', 'nK', 'mA')
halbe_nk_mA = get_path('Halbe', 'nK', 'mA')
spreeau_nk_mA = get_path('Spreeau', 'nK', 'mA')
hberg_nk_mA = get_path('Hangelsberg', 'nK', 'mA')
# create a multidemensional xarray of all pictures located in the relative directory
def create_xarray(relative_path):
#print(relative_path)
#print(os.getcwd())
os.chdir(relative_path)
#print(os.getcwd())
liste = os.listdir(os.getcwd())
rgb_list = []
for i in range(len(liste)):
#print(liste[i])
im = plt.imread(liste[i])
x = np.arange(len(im[0]))
y = np.arange(len(im))
channel = np.arange(3)
im_xr = xr.DataArray(im,coords={'y': y,'x': x,'channel': channel},dims=["y", "x", "channel"])
rgb_list.append(im_xr)
#print(str(liste[i]) + ' ' +
# 'y-Achse: ' + ' ' + str(len(im)) + ', ' +
# 'x-Achse: ' + ' ' + str(len(im[0])) + ', ' + 'channel: ' + ' ' + str(len(im[0][0])))
#print(' ')
x = np.arange(len(rgb_list[0][0]))
y = np.arange(len(rgb_list[0]))
channel = np.arange(3)
time = np.arange(len(rgb_list))
xar = xr.DataArray(rgb_list,
dims=("time",
"y", "x", "channel")
,
coords={"x": x,
"y": y,
"channel": channel,
"time" : time},
name='rgb')
return xar
# plot the xarray
def plot(xar):
return xar.hvplot.rgb(x='x', y='y', bands='channel', data_aspect=1, flip_yaxis=True, xaxis=False, yaxis=None, widget_type='scrubber',
widget_location='bottom')
# widgets for interactive
auflage_button = pn.widgets.RadioButtonGroup(
name='Auflage',
options=['mit Auflage', 'ohne Auflage'],
button_type='success')
k_nk_button = pn.widgets.RadioButtonGroup(
name='k_nk',
options=['k', 'nk'],
button_type='success')
Stndrt_button = pn.widgets.RadioButtonGroup(
name='Standort',
options=['Glienig', 'Groß Liebitz', 'Krausnick', 'Hangelsberg', 'Spreeau', 'Halbe'],
button_type='success')
# create an interactive dataframe to assign the widgets and get the desired actions
param_df = pd.DataFrame({'Standort' : [
'Glienig',
'Glienig',
'Glienig',
'Glienig',
'Groß Liebitz',
'Groß Liebitz',
'Groß Liebitz',
'Groß Liebitz',
'Krausnick',
'Krausnick',
'Krausnick',
'Krausnick',
'Hangelsberg',
'Hangelsberg',
'Hangelsberg',
'Hangelsberg',
'Spreeau',
'Spreeau',
'Spreeau',
'Spreeau',
'Halbe',
'Halbe',
'Halbe',
'Halbe'],
'k_nk' : [
'k',
'k',
'nk',
'nk',
'k',
'k',
'nk',
'nk',
'k',
'k',
'nk',
'nk',
'k',
'k',
'nk',
'nk',
'k',
'k',
'nk',
'nk',
'k',
'k',
'nk',
'nk',
],
'Auflage' : [
'mit Auflage',
'ohne Auflage',
'mit Auflage',
'ohne Auflage',
'mit Auflage',
'ohne Auflage',
'mit Auflage',
'ohne Auflage',
'mit Auflage',
'ohne Auflage',
'mit Auflage',
'ohne Auflage',
'mit Auflage',
'ohne Auflage',
'mit Auflage',
'ohne Auflage',
'mit Auflage',
'ohne Auflage',
'mit Auflage',
'ohne Auflage',
'mit Auflage',
'ohne Auflage',
'mit Auflage',
'ohne Auflage',
]
})
# make interactive with hvplot.pandas
param_dfi = param_df.interactive()
param_df_pipe = param_dfi[
(param_dfi.Standort == Stndrt_button) &
(param_dfi.k_nk == k_nk_button) &
(param_dfi.Auflage == auflage_button)
]
# make anything interactive with pipe
def callback(param_df_pipe):
if Stndrt_button.value == 'Glienig' and k_nk_button.value == 'k' and auflage_button.value == 'mit Auflage':
return create_xarray(glienig_k_mA).pipe(plot)
if Stndrt_button.value == 'Glienig' and k_nk_button.value == 'k' and auflage_button.value == 'ohne Auflage':
return create_xarray(glienig_k_oA).pipe(plot)
if Stndrt_button.value == 'Glienig' and k_nk_button.value == 'nk' and auflage_button.value == 'mit Auflage':
return create_xarray(glienig_nk_mA).pipe(plot)
if Stndrt_button.value == 'Glienig' and k_nk_button.value == 'nk' and auflage_button.value == 'ohne Auflage':
return create_xarray(glienig_nk_oA).pipe(plot)
######################################################################################################################
if Stndrt_button.value == 'Groß Liebitz' and k_nk_button.value == 'k' and auflage_button.value == 'mit Auflage':
return create_xarray(grliebitz_k_mA).pipe(plot)
if Stndrt_button.value == 'Groß Liebitz' and k_nk_button.value == 'k' and auflage_button.value == 'ohne Auflage':
return create_xarray(grliebitz_k_oA).pipe(plot)
if Stndrt_button.value == 'Groß Liebitz' and k_nk_button.value == 'nk' and auflage_button.value == 'mit Auflage':
return create_xarray(grliebitz_nk_mA).pipe(plot)
if Stndrt_button.value == 'Groß Liebitz' and k_nk_button.value == 'nk' and auflage_button.value == 'ohne Auflage':
return create_xarray(grliebitz_nk_oA).pipe(plot)
#######################################################################################################################
if Stndrt_button.value == 'Krausnick' and k_nk_button.value == 'k' and auflage_button.value == 'mit Auflage':
return create_xarray(krausnick_k_mA).pipe(plot)
if Stndrt_button.value == 'Krausnick' and k_nk_button.value == 'k' and auflage_button.value == 'ohne Auflage':
return create_xarray(krausnick_k_oA).pipe(plot)
if Stndrt_button.value == 'Krausnick' and k_nk_button.value == 'nk' and auflage_button.value == 'mit Auflage':
return create_xarray(krausnick_nk_mA).pipe(plot)
if Stndrt_button.value == 'Krausnick' and k_nk_button.value == 'nk' and auflage_button.value == 'ohne Auflage':
return create_xarray(krausnick_nk_oA).pipe(plot)
#######################################################################################################################
if Stndrt_button.value == 'Hangelsberg' and k_nk_button.value == 'k' and auflage_button.value == 'mit Auflage':
return create_xarray(hberg_k_mA).pipe(plot)
if Stndrt_button.value == 'Hangelsberg' and k_nk_button.value == 'k' and auflage_button.value == 'ohne Auflage':
return create_xarray(hberg_k_oA).pipe(plot)
if Stndrt_button.value == 'Hangelsberg' and k_nk_button.value == 'nk' and auflage_button.value == 'mit Auflage':
return create_xarray(hberg_nk_mA).pipe(plot)
if Stndrt_button.value == 'Hangelsberg' and k_nk_button.value == 'nk' and auflage_button.value == 'ohne Auflage':
return create_xarray(hberg_nk_oA).pipe(plot)
#######################################################################################################################
if Stndrt_button.value == 'Spreeau' and k_nk_button.value == 'k' and auflage_button.value == 'mit Auflage':
return create_xarray(spreeau_k_mA).pipe(plot)
if Stndrt_button.value == 'Spreeau' and k_nk_button.value == 'k' and auflage_button.value == 'ohne Auflage':
return create_xarray(spreeau_k_oA).pipe(plot)
if Stndrt_button.value == 'Spreeau' and k_nk_button.value == 'nk' and auflage_button.value == 'mit Auflage':
return create_xarray(spreeau_nk_mA).pipe(plot)
if Stndrt_button.value == 'Spreeau' and k_nk_button.value == 'nk' and auflage_button.value == 'ohne Auflage':
return create_xarray(spreeau_nk_oA).pipe(plot)
########################################################################################################################
if Stndrt_button.value == 'Halbe' and k_nk_button.value == 'k' and auflage_button.value == 'mit Auflage':
return create_xarray(halbe_k_mA).pipe(plot)
if Stndrt_button.value == 'Halbe' and k_nk_button.value == 'k' and auflage_button.value == 'ohne Auflage':
return create_xarray(halbe_k_oA).pipe(plot)
if Stndrt_button.value == 'Halbe' and k_nk_button.value == 'nk' and auflage_button.value == 'mit Auflage':
return create_xarray(halbe_nk_mA).pipe(plot)
if Stndrt_button.value == 'Halbe' and k_nk_button.value == 'nk' and auflage_button.value == 'ohne Auflage':
return create_xarray(halbe_nk_oA).pipe(plot)
stahlrahmen = pn.Row(param_df_pipe.pipe(callback), pn.Column(pn.pane.Markdown('## Stahlrahmen'),
pn.pane.Markdown('Quadratische Stahlrahmen (Kantenlänge ca. 1x1m) zur Bestimmung der Abbauraten (Oberflächenmessungen) der Streuschicht.'))
)
template = pn.template.FastListTemplate(
title='Stahlrahmen',
sidebar=[pn.pane.Markdown(
"## Einstellungen"),
'Standort',Stndrt_button,
'Gekalkt/ungekalkt', k_nk_button,
'Auflage',auflage_button
],
main=[pn.pane.Markdown(
"## Streufall Stahlrahmen"),
stahlrahmen#.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\Stahlrahmen
# panel serve 20230313_Stahlrahmen_Docker_relative_path.ipynb --autoreload