Skip to content

Instantly share code, notes, and snippets.

View treuille's full-sized avatar

Adrien Treuille treuille

View GitHub Profile
@treuille
treuille / streamlit_app.py
Created November 22, 2022 02:46
Example of how to access widget state in a callback.
import streamlit as st
with st.echo():
def on_change():
st.write(f"my_selection **(1)**: `{st.session_state.my_selection}`")
my_selection = st.selectbox(
"Select something", ["a", "b"], on_change=on_change, key="my_selection"
)
st.write(f"my_selection **(2)**: `{st.session_state.my_selection}`")
@treuille
treuille / colored_deck_gl.py
Created October 30, 2019 23:13
Answer: Adding color to a DeckGL 'ScatterplotLayer' in Streamlit
import streamlit as st
import pandas as pd
import numpy as np
n_points = 1000
sf_lat, sf_lon = 37.76, -122.4
map_data = pd.DataFrame({
'lat': np.random.randn(n_points) / 50 + sf_lat,
'lon': np.random.randn(n_points) / 50 + sf_lon,
'colorR': np.random.uniform(size=n_points, high=255.0),
@treuille
treuille / selecting_rows.py
Created October 30, 2019 22:18
Workaround: Selecting rows from a dataframe.
import streamlit as st
import pandas as pd
# Load some example data.
DATA_URL = \
"http://s3-us-west-2.amazonaws.com/streamlit-demo-data/uber-raw-data-sep14.csv.gz"
data = st.cache(pd.read_csv)(DATA_URL, nrows=1000)
# Select some rows using st.multiselect. This will break down when you have >1000 rows.
st.write('### Full Dataset', data)
@treuille
treuille / partial_cache.py
Created October 19, 2019 16:28
Workaround: Partial Caching
import streamlit as st
import functools
def partial_cache(func=None, **cache_kwargs):
"""Like st.cache, but if the function returns None, then nothing is cached.
Parameters
----------
func : Callable
@treuille
treuille / display_dataframe_quickly.py
Created October 19, 2019 03:04
Workaround: Displaying a dataframe quickly by slicing it.
import streamlit as st
import pandas as pd
import numpy as np
def display_dataframe_quickly(df, max_rows=5000, **st_dataframe_kwargs):
"""Display a subset of a DataFrame or Numpy Array to speed up app renders.
Parameters
----------
df : DataFrame | ndarray
@treuille
treuille / render_svg.py
Last active September 28, 2023 14:13
Workaround: Displaying SVG images in Streamlit
import streamlit as st
import base64
import textwrap
def render_svg(svg):
"""Renders the given svg string."""
b64 = base64.b64encode(svg.encode('utf-8')).decode("utf-8")
html = r'<img src="data:image/svg+xml;base64,%s"/>' % b64
st.write(html, unsafe_allow_html=True)
@treuille
treuille / fancy_cache.py
Last active June 5, 2021 16:15
Workaround: Adding ttl and sesssion uniqueness to @st.cache
import streamlit as st
import streamlit.ReportThread as ReportThread
from streamlit.server.Server import Server
import time
import functools
import random
import string
# Copied from tvst's great gist:
@treuille
treuille / latex.py
Last active November 11, 2019 16:22
Workaround: Rendering LaTeX in Streamlit
import streamlit as st
from io import BytesIO
import matplotlib.pyplot as plt
def render_latex(formula, fontsize=12, dpi=300):
"""Renders LaTeX formula into Streamlit."""
fig = plt.figure()
text = fig.text(0, 0, '$%s$' % formula, fontsize=fontsize)
fig.savefig(BytesIO(), dpi=dpi) # triggers rendering
@treuille
treuille / powers_in_dash.py
Last active July 10, 2020 13:15
Comparing Dash and Streamlit
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div([
@treuille
treuille / matplotlib_animation.py
Created October 4, 2019 16:47
Answer: Animating a Matplotlib chart
import matplotlib.pyplot as plt
import numpy as np
import streamlit as st
import time
fig, ax = plt.subplots()
max_x = 5
max_rand = 10