Spaces:
Sleeping
Sleeping
File size: 3,083 Bytes
5877840 c995b22 5877840 c995b22 5877840 c995b22 5877840 c995b22 5877840 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
import streamlit as st
import plotly.graph_objects as go
import numpy as np
def plot(kvl_file):
st.title('KVL Data Visualisation')
nt = 0
sampleno = 0
if not kvl_file:
st.warning('No file has been uploaded')
else:
if 'TIME' in kvl_file:
nt = len(kvl_file['TIME'])
dt = int(kvl_file['TIME'][1]) - int(kvl_file['TIME'][0])
t_iter = list(kvl_file['TIME'])
keys = list(kvl_file.keys())
curves = st.multiselect('Select TOP Key to Visualize surface, SED keys to project', keys)
inst = st.select_slider('Select Time Instance', t_iter)
gridno=st.checkbox('Grid on')
if gridno:
kgrid=st.number_input('Higher the number, coarser the grid',value=2,placeholder=2)
else:
kgrid=2
time = int(inst) / dt
sampleno = len(kvl_file['TOP']) / nt
start_index = int(time * sampleno)
end_index = start_index + int(sampleno)
# Get the data for the current instance
for curve in curves:
height_data = kvl_file['TOP'][start_index:end_index]
intensity_data= kvl_file[curve][start_index:end_index]
# Create the surface plot for the 'TOP' key
z_data = np.array(height_data)
x_data = np.arange(z_data.shape[1])
y_data = np.arange(z_data.shape[0])
# Create meshgrid for surface
xGrid, yGrid = np.meshgrid(x_data[::kgrid], y_data[::kgrid])
xRev, yRev = np.meshgrid(y_data[::kgrid], x_data[::kgrid])
# Create figure
fig = go.Figure(data=[go.Surface(x=x_data, y=y_data, z=z_data,surfacecolor=intensity_data,colorscale='Rainbow')])
if gridno: #grid on
for i,j,k in zip(xGrid,yGrid,z_data[::kgrid,::kgrid]):
fig.add_trace(go.Scatter3d(x=i,y=j,z=k, mode='lines', line=dict(color='black', width=1,)))
for i,j,k in zip(xRev,yRev,z_data[::kgrid,::kgrid].T):
fig.add_trace(go.Scatter3d(x=j,y=i,z=k, mode='lines', line=dict(color='black', width=1,)))
# Update the layout of the figure
fig.update_layout(
height=700,
showlegend=False,
title='KVL Data Visualisation of '+curve,
scene=dict(
xaxis_title='X',
yaxis_title='Y',
zaxis_title='Z',
aspectmode='manual',
aspectratio=dict(x=1.5, y=1.5, z=1),
camera=dict(
eye=dict(x=2.2, y=-1, z=0.6)
),
)
)
# Display the figure
st.plotly_chart(fig, theme=None, use_container_width=True)
else:
st.warning('No time data found') |