# -*- 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