Displaying Streamlit Data
by streamlit
Displaying charts, dataframes, and metrics in Streamlit. Use when visualizing data, configuring dataframe columns, or adding sparklines to metrics. Covers native charts, Altair, and column configuration.
Skill Details
Repository Files
1 file in this skill directory
name: displaying-streamlit-data description: Displaying charts, dataframes, and metrics in Streamlit. Use when visualizing data, configuring dataframe columns, or adding sparklines to metrics. Covers native charts, Altair, and column configuration. license: Apache-2.0
Streamlit charts & data
Present data clearly.
Choosing display elements
| Element | Use Case |
|---|---|
st.dataframe |
Interactive exploration, sorting, filtering |
st.data_editor |
User-editable tables |
st.table |
Static display, no interaction needed |
st.metric |
KPIs with delta indicators |
st.json |
Structured data inspection |
Native charts first
Prefer Streamlit's native charts for simple cases.
st.line_chart(df, x="date", y="revenue")
st.bar_chart(df, x="category", y="count")
st.scatter_chart(df, x="age", y="salary")
st.area_chart(df, x="date", y="value")
Native charts support additional parameters: color for series grouping, stack for bar/area stacking, size for scatter point sizing, horizontal for horizontal bars. See the chart API reference for full options.
Human-readable labels
Use clear labels—not column names or abbreviations. Skip x_label/y_label if the column names are already readable.
# BAD: cryptic column names without labels
st.line_chart(df, x="dt", y="rev")
# GOOD: readable columns, no labels needed
st.line_chart(df, x="date", y="revenue")
# GOOD: cryptic columns, add labels
st.line_chart(df, x="dt", y="rev", x_label="Date", y_label="Revenue")
Altair for complex charts
Use Altair when you need more control. Altair is bundled with Streamlit (no extra install), while Plotly requires an additional package. Pick one and stay consistent throughout your app.
import altair as alt
chart = alt.Chart(df).mark_line().encode(
x=alt.X("date:T", title="Date"),
y=alt.Y("revenue:Q", title="Revenue ($)"),
color="region:N"
)
st.altair_chart(chart)
When to use Altair:
- Custom axis formatting
- Multiple series with legends
- Interactive tooltips
- Layered visualizations
Dataframe column configuration
Use column_config where it adds value—formatting currencies, showing progress bars, displaying links or images. Don't add config just for labels or tooltips that don't meaningfully improve readability. Works with both st.dataframe and st.data_editor.
st.dataframe(
df,
column_config={
"revenue": st.column_config.NumberColumn(
"Revenue",
format="$%.2f"
),
"completion": st.column_config.ProgressColumn(
"Progress",
min_value=0,
max_value=100
),
"url": st.column_config.LinkColumn("Website"),
"logo": st.column_config.ImageColumn("Logo"),
"created_at": st.column_config.DatetimeColumn(
"Created",
format="MMM DD, YYYY"
),
"internal_id": None, # Hide non-essential columns
},
hide_index=True,
)
Note on hiding columns: Setting a column to None hides it from the UI, but the data is still sent to the frontend. For truly sensitive data, pre-filter the DataFrame before displaying.
Dataframe best practices:
- Hide useless index:
hide_index=True - Or make index meaningful:
df = df.set_index("customer_name")before displaying - Hide internal/technical columns: Set column to
Nonein config (but pre-filter for sensitive data) - Use visual column types where they help: sparklines for trends, progress bars for completion, images for logos
Column types:
AreaChartColumn→ Area sparklinesBarChartColumn→ Bar sparklinesCheckboxColumn→ Boolean as checkboxDateColumn→ Date only (no time)DatetimeColumn→ Dates with formattingImageColumn→ ImagesJSONColumn→ Display JSON objectsLineChartColumn→ Sparkline chartsLinkColumn→ Clickable linksListColumn→ Display lists/arraysMultiselectColumn→ Multi-value selectionNumberColumn→ Numbers with formattingProgressColumn→ Progress barsSelectboxColumn→ Editable dropdownTextColumn→ Text with formattingTimeColumn→ Time only (no date)
Pinned columns
Keep important columns visible while scrolling horizontally:
st.dataframe(
df,
column_config={
"Title": st.column_config.TextColumn(pinned=True), # Always visible
"Rating": st.column_config.ProgressColumn(min_value=0, max_value=10),
},
hide_index=True,
)
Data editor
Use st.data_editor when users need to edit data directly:
edited_df = st.data_editor(
df,
num_rows="dynamic", # Allow adding/deleting rows
column_config={
"status": st.column_config.SelectboxColumn(
"Status",
options=["pending", "approved", "rejected"]
),
},
)
# React to edits
if not edited_df.equals(df):
save_changes(edited_df)
JSON display
For structured data inspection. Accepts dicts, lists, or any JSON-serializable object:
st.json({"name": "John", "scores": [95, 87, 92]})
Sparklines in metrics
Add chart_data and chart_type to metrics for visual context.
values = [700, 720, 715, 740, 762, 755, 780]
st.metric(
label="Developers",
value="762k",
delta="-7.42% (MoM)",
delta_color="inverse",
chart_data=values,
chart_type="line" # or "bar"
)
Note: Sparklines only show y-values and ignore x-axis spacing. Use them for evenly-spaced data (like daily or weekly snapshots). For irregularly-spaced time series, use a proper chart instead.
See building-streamlit-dashboards for composing metrics into dashboard layouts.
References
Related Skills
Xlsx
Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work with spreadsheets (.xlsx, .xlsm, .csv, .tsv, etc) for: (1) Creating new spreadsheets with formulas and formatting, (2) Reading or analyzing data, (3) Modify existing spreadsheets while preserving formulas, (4) Data analysis and visualization in spreadsheets, or (5) Recalculating formulas
Clickhouse Io
ClickHouse database patterns, query optimization, analytics, and data engineering best practices for high-performance analytical workloads.
Clickhouse Io
ClickHouse database patterns, query optimization, analytics, and data engineering best practices for high-performance analytical workloads.
Analyzing Financial Statements
This skill calculates key financial ratios and metrics from financial statement data for investment analysis
Data Storytelling
Transform data into compelling narratives using visualization, context, and persuasive structure. Use when presenting analytics to stakeholders, creating data reports, or building executive presentations.
Team Composition Analysis
This skill should be used when the user asks to "plan team structure", "determine hiring needs", "design org chart", "calculate compensation", "plan equity allocation", or requests organizational design and headcount planning for a startup.
Startup Financial Modeling
This skill should be used when the user asks to "create financial projections", "build a financial model", "forecast revenue", "calculate burn rate", "estimate runway", "model cash flow", or requests 3-5 year financial planning for a startup.
Kpi Dashboard Design
Design effective KPI dashboards with metrics selection, visualization best practices, and real-time monitoring patterns. Use when building business dashboards, selecting metrics, or designing data visualization layouts.
Dbt Transformation Patterns
Master dbt (data build tool) for analytics engineering with model organization, testing, documentation, and incremental strategies. Use when building data transformations, creating data models, or implementing analytics engineering best practices.
Startup Metrics Framework
This skill should be used when the user asks about "key startup metrics", "SaaS metrics", "CAC and LTV", "unit economics", "burn multiple", "rule of 40", "marketplace metrics", or requests guidance on tracking and optimizing business performance metrics.
