Data Display in Streamlit Intermediate

Streamlit excels at displaying data. This lesson covers DataFrames, static tables, built-in charts, and integration with Plotly, Altair, and map visualizations.

DataFrames

Python
import streamlit as st
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(50, 3), columns=["A", "B", "C"])

# Interactive DataFrame (sortable, searchable)
st.dataframe(df, use_container_width=True, height=400)

# Static table (no interactivity)
st.table(df.head(10))

# Editable DataFrame
edited_df = st.data_editor(df, num_rows="dynamic")

# DataFrame with column configuration
st.dataframe(df, column_config={
    "A": st.column_config.NumberColumn("Value A", format="%.2f"),
    "B": st.column_config.ProgressColumn("Progress", min_value=-3, max_value=3),
})

Built-in Charts

Python
# Line chart
st.line_chart(df)

# Bar chart
st.bar_chart(df)

# Area chart
st.area_chart(df)

# Scatter chart
st.scatter_chart(df, x="A", y="B", size="C")

Plotly Charts

Python
import plotly.express as px

# Plotly scatter plot
fig = px.scatter(df, x="A", y="B", color="C",
                 title="Scatter Plot")
st.plotly_chart(fig, use_container_width=True)

# Plotly histogram
fig = px.histogram(df, x="A", nbins=30,
                   title="Distribution of A")
st.plotly_chart(fig)

# Plotly pie chart
sales = pd.DataFrame({
    "Category": ["Electronics", "Clothing", "Food"],
    "Revenue": [4500, 2300, 1800]
})
fig = px.pie(sales, values="Revenue", names="Category")
st.plotly_chart(fig)

Altair Charts

Python
import altair as alt

chart = alt.Chart(df).mark_circle().encode(
    x="A",
    y="B",
    size="C",
    tooltip=["A", "B", "C"]
).interactive()

st.altair_chart(chart, use_container_width=True)

Maps

Python
# Simple map with lat/lon data
map_data = pd.DataFrame({
    "lat": np.random.randn(100) / 50 + 37.76,
    "lon": np.random.randn(100) / 50 - 122.4
})

st.map(map_data)

Metrics

Python
# Display KPI metrics with deltas
col1, col2, col3, col4 = st.columns(4)
col1.metric("Revenue", "$12,450", "+12.3%")
col2.metric("Users", "1,234", "+45")
col3.metric("Accuracy", "94.2%", "-0.3%", delta_color="inverse")
col4.metric("Latency", "32ms", "-8ms", delta_color="inverse")
Chart Selection Guide: Use built-in charts (st.line_chart, st.bar_chart) for quick visualizations. Use Plotly for interactive, publication-quality charts with hover tooltips. Use Altair for grammar-of-graphics style declarative charts.

Data Visualized!

You can now display any data beautifully. Next, add interactivity with buttons, sliders, forms, and session state.

Next: Interactivity →