dockerspace / app.py
glennrory's picture
Update app.py
0b5f1e8 verified
raw
history blame
4.94 kB
# from pathlib import Path
# from typing import List, Dict, Tuple
# import matplotlib.colors as mpl_colors
# import pandas as pd
# import seaborn as sns
# import shinyswatch
# from shiny import App, Inputs, Outputs, Session, reactive, render, req, ui
# sns.set_theme()
# www_dir = Path(__file__).parent.resolve() / "www"
# df = pd.read_csv(Path(__file__).parent / "penguins.csv", na_values="NA")
# numeric_cols: List[str] = df.select_dtypes(include=["float64"]).columns.tolist()
# species: List[str] = df["Species"].unique().tolist()
# species.sort()
# app_ui = ui.page_fillable(
# shinyswatch.theme.minty(),
# ui.layout_sidebar(
# ui.sidebar(
# # Artwork by @allison_horst
# ui.input_selectize(
# "xvar",
# "X variable",
# numeric_cols,
# selected="Bill Length (mm)",
# ),
# ui.input_selectize(
# "yvar",
# "Y variable",
# numeric_cols,
# selected="Bill Depth (mm)",
# ),
# ui.input_checkbox_group(
# "species", "Filter by species", species, selected=species
# ),
# ui.hr(),
# ui.input_switch("by_species", "Show species", value=True),
# ui.input_switch("show_margins", "Show marginal plots", value=True),
# ),
# ui.output_ui("value_boxes"),
# ui.output_plot("scatter", fill=True),
# ui.help_text(
# "Artwork by ",
# ui.a("@allison_horst", href="https://twitter.com/allison_horst"),
# class_="text-end",
# ),
# ),
# )
# def server(input: Inputs, output: Outputs, session: Session):
# @reactive.Calc
# def filtered_df() -> pd.DataFrame:
# """Returns a Pandas data frame that includes only the desired rows"""
# # This calculation "req"uires that at least one species is selected
# req(len(input.species()) > 0)
# # Filter the rows so we only include the desired species
# return df[df["Species"].isin(input.species())]
# @output
# @render.plot
# def scatter():
# """Generates a plot for Shiny to display to the user"""
# # The plotting function to use depends on whether margins are desired
# plotfunc = sns.jointplot if input.show_margins() else sns.scatterplot
# plotfunc(
# data=filtered_df(),
# x=input.xvar(),
# y=input.yvar(),
# palette=palette,
# hue="Species" if input.by_species() else None,
# hue_order=species,
# legend=False,
# )
# @output
# @render.ui
# def value_boxes():
# df = filtered_df()
# def penguin_value_box(title: str, count: int, bgcol: str, showcase_img: str):
# return ui.value_box(
# title,
# count,
# {"class_": "pt-1 pb-0"},
# showcase=ui.fill.as_fill_item(
# ui.tags.img(
# {"style": "object-fit:contain;"},
# src=showcase_img,
# )
# ),
# theme_color=None,
# style=f"background-color: {bgcol};",
# )
# if not input.by_species():
# return penguin_value_box(
# "Penguins",
# len(df.index),
# bg_palette["default"],
# # Artwork by @allison_horst
# showcase_img="penguins.png",
# )
# value_boxes = [
# penguin_value_box(
# name,
# len(df[df["Species"] == name]),
# bg_palette[name],
# # Artwork by @allison_horst
# showcase_img=f"{name}.png",
# )
# for name in species
# # Only include boxes for _selected_ species
# if name in input.species()
# ]
# return ui.layout_column_wrap(*value_boxes, width = 1 / len(value_boxes))
# # "darkorange", "purple", "cyan4"
# colors = [[255, 140, 0], [160, 32, 240], [0, 139, 139]]
# colors = [(r / 255.0, g / 255.0, b / 255.0) for r, g, b in colors]
# palette: Dict[str, Tuple[float, float, float]] = {
# "Adelie": colors[0],
# "Chinstrap": colors[1],
# "Gentoo": colors[2],
# "default": sns.color_palette()[0], # type: ignore
# }
# bg_palette = {}
# # Use `sns.set_style("whitegrid")` to help find approx alpha value
# for name, col in palette.items():
# # Adjusted n_colors until `axe` accessibility did not complain about color contrast
# bg_palette[name] = mpl_colors.to_hex(sns.light_palette(col, n_colors=7)[1]) # type: ignore
# app = App(
# app_ui,
# server,
# static_assets=str(www_dir),
# )
from data import get_data
get_data()