Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import seaborn as sns | |
| import matplotlib.pyplot as plt | |
| # Apply the default theme and activate color codes | |
| sns.set_theme() | |
| sns.set(color_codes=True) | |
| ################### import dataset | |
| penguins = sns.load_dataset("penguins") | |
| ########### set the title and subtitle | |
| st.title("Differences between penguins") | |
| st.subheader("My flipper is longer!!!") | |
| ########## we add image | |
| st.image("https://raw.githubusercontent.com/allisonhorst/palmerpenguins/main/man/figures/lter_penguins.png") | |
| ############## we create filters for our interactive plot | |
| with st.sidebar: | |
| st.subheader("Filters") | |
| all_species = sorted(penguins["species"].dropna().unique().tolist()) | |
| selected_species = st.multiselect( | |
| "Species to show", | |
| options=all_species, | |
| default=all_species, | |
| ) | |
| feature_options = { | |
| "Flipper length (mm)": "flipper_length_mm", | |
| "Bill length (mm)": "bill_length_mm", | |
| "Bill depth (mm)": "bill_depth_mm", | |
| "Body mass (g)": "body_mass_g", | |
| } | |
| feature_label = st.selectbox("Feature (x-axis)", list(feature_options.keys())) | |
| x_col = feature_options[feature_label] | |
| # KDE options | |
| fill = st.checkbox("Shade area", value=True) | |
| bw_adjust = st.slider("Smoothing (bw_adjust)", 0.2, 2.0, 1.0, 0.1) | |
| common_norm = st.checkbox("Normalize across species", value=False) | |
| if not selected_species: | |
| st.info("Select at least one species to display the plot.") | |
| else: | |
| data = penguins[penguins["species"].isin(selected_species)].dropna(subset=[x_col]) | |
| g = sns.displot( | |
| data=data, | |
| x=x_col, | |
| kind="kde", | |
| hue="species", | |
| fill=fill, | |
| bw_adjust=bw_adjust, | |
| common_norm=common_norm, | |
| height=4, | |
| aspect=1.6, | |
| ) | |
| fig = g.fig if hasattr(g, "fig") else g.figure | |
| st.pyplot(fig) | |
| plt.close(fig) | |
| ######## add button to save image | |
| from io import BytesIO | |
| buf = BytesIO() | |
| fig.savefig(buf, format="png", dpi=200, bbox_inches="tight") | |
| buf.seek(0) | |
| st.download_button( | |
| "Save image", | |
| data=buf, | |
| file_name=f"penguins_{x_col}.png", | |
| mime="image/png", | |
| ) | |
| ########### Footer | |
| st.caption("Developed for SDS M1 course.") | |