mcpField
A
alterlab-plotly

alterlab-plotly

github.com/alterlab-ieuData & databases7868 installsUpdated 5w ago
Repository

About alterlab-plotly

A Plotly skill for Python users creating interactive data visualizations, with many chart types, detailed styling controls, and HTML or static-image export.

Key features

  1. 0140+ chart types
  2. 02Plotly Express and Graph Objects
  3. 03Zoom, hover, and animation interactions
  4. 04Subplot layouts and styling
  5. 05Export interactive HTML and static images

Use cases

  1. 01Inspect individual observations in data
  2. 02Create shareable interactive charts
  3. 03Build multi-chart dashboards
  4. 04Export figures for papers or reports

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-plotly

After installing, type/alterlab-plotlyin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

evals/
evals.json
references/
chart-types.md
export-interactivity.md
graph-objects.md
layouts-styling.md
plotly-express.md

Details

From the project README

Plotly

Python graphing library for creating interactive, publication-quality visualizations with 40+ chart types. Examples target plotly >= 6 and run on plotly 7.1 (plotly.js 4); see "Plotly 7 changes" below if you are upgrading older code.

When to Use This Skill

Use this skill when the chart must be explored or shared interactively:

  • Hover tooltips, zoom/pan, legend toggling, rangesliders, dropdowns, or animation frames
  • Standalone HTML or web-embedded figures, and Dash dashboards
  • Rotatable 3D plots (surface, scatter3d, mesh, volume)
  • Exploratory analysis where readers need to inspect individual points
Does NOT Trigger
ScenarioUse Instead
Static, print-ready figure with no interactivityalterlab-matplotlib
Journal-formatted multi-panel figure (column widths, Okabe-Ito palette, significance stars)alterlab-scientific-viz
Quick static statistical plot from a DataFrame (heatmap, pair plot, distributions)alterlab-seaborn
Flowchart, pathway, or architecture diagramalterlab-scientific-schematics / alterlab-mermaid

Quick Start

Install Plotly:

uv pip install plotly

Basic usage with Plotly Express (high-level API):

import plotly.express as px
import pandas as pd

df = pd.DataFrame({
    'x': [1, 2, 3, 4],
    'y': [10, 11, 12, 13]
})

fig = px.scatter(df, x='x', y='y', title='My First Plot')
fig.show()

Choosing Between APIs

Use Plotly Express (px)

For quick, standard visualizations with sensible defaults:

  • Working with pandas DataFrames
  • Creating common chart types (scatter, line, bar, histogram, etc.)
  • Need automatic color encoding and legends
  • Want minimal code (1-5 lines)

See references/plotly-express.md for complete guide.

Use Graph Objects (go)

For fine-grained control and custom visualizations:

  • Chart types not in Plotly Express (3D mesh, isosurface, complex financial charts)
  • Building complex multi-trace figures from scratch
  • Need precise control over individual components
  • Creating specialized visualizations with custom shapes and annotations

See references/graph-objects.md for complete guide.

Note: Plotly Express returns graph objects Figure, so you can combine approaches:

fig = px.scatter(df, x='x', y='y')
fig.update_layout(title='Custom Title')  # Use go methods on px figure
fig.add_hline(y=10)                     # Add shapes

Core Capabilities

1. Chart Types

Plotly supports 40+ chart types organized into categories:

Basic Charts: scatter, line, bar, pie, area, bubble

Statistical Charts: histogram, box plot, violin, distribution, error bars

Scientific Charts: heatmap, contour, ternary, image display

Financial Charts: candlestick, OHLC, waterfall, funnel, time series

Maps: scatter maps, choropleth, density maps (geographic, MapLibre-backed; the *_mapbox functions and traces were removed in plotly 7)

3D Charts: scatter3d, surface, mesh, cone, volume

Specialized: sunburst, treemap, sankey, parallel coordinates, gauge

For detailed examples and usage of all chart types, see references/chart-types.md.

2. Layouts and Styling

Subplots: Create multi-plot figures with shared axes:

from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(rows=2, cols=2, subplot_titles=('A', 'B', 'C', 'D'))
fig.add_trace(go.Scatter(x=[1, 2], y=[3, 4]), row=1, col=1)

Templates: Apply coordinated styling:

fig = px.scatter(df, x='x', y='y', template='plotly_dark')
# Built-in: plotly_white, plotly_dark, ggplot2, seaborn, simple_white

Customization: Control every aspect of appearance:

  • Colors (discrete sequences, continuous scales)
  • Fonts and text
  • Axes (ranges, ticks, grids)
  • Legends
  • Margins and sizing
  • Annotations and shapes

For complete layout and styling options, see references/layouts-styling.md.

3. Interactivity

Built-in interactive features:

  • Hover tooltips with customizable data
  • Pan and zoom
  • Legend toggling
  • Box/lasso selection
  • Rangesliders for time series
  • Buttons and dropdowns
  • Animations
# Custom hover template
fig.update_traces(
    hovertemplate='<b>%{x}</b><br>Value: %{y:.2f}<extra></extra>'
)

# Add rangeslider
fig.update_xaxes(rangeslider_visible=True)

# Animations
fig = px.scatter(df, x='x', y='y', animation_frame='year')

For complete interactivity guide, see references/export-interactivity.md.

4. Export Options

Interactive HTML:

fig.write_html('chart.html')                       # Full standalone
fig.write_html('chart.html', include_plotlyjs='cdn')  # Smaller file

Static Images (requires kaleido >= 1 and Chrome):

uv pip install kaleido
plotly_get_chrome    # one-time: installs a Chrome build if the machine has none
fig.write_image('chart.png', scale=3)   # PNG (700x500 default size -> 2100x1500 px)
fig.write_image('chart.pdf')            # PDF
fig.write_image('chart.svg')            # SVG

Without Chrome, write_image raises "Kaleido requires Google Chrome to be installed". Set export defaults with plotly.io.defaults (e.g. pio.defaults.default_scale = 2); the old pio.kaleido.scope settings no longer exist.

For complete export options, see references/export-interactivity.md.

Common Workflows

Scientific Data Visualization
import plotly.express as px

# Scatter plot with trendline (trendline='ols'/'lowess' requires statsmodels:
#   uv pip install statsmodels)
fig = px.scatter(df, x='temperature', y='yield', trendline='ols')

# Heatmap from matrix
fig = px.imshow(correlation_matrix, text_auto=True, color_continuous_scale='RdBu')

# 3D surface plot
import plotly.graph_objects as go
fig = go.Figure(data=[go.Surface(z=z_data, x=x_data, y=y_data)])
Statistical Analysis
# Distribution comparison
fig = px.histogram(df, x='values', color='group', marginal='box', nbins=30)

# Box plot with all points
fig = px.box(df, x='category', y='value', points='all')

# Violin plot
fig = px.violin(df, x='group', y='measurement', box=True)
Time Series and Financial
# Time series with rangeslider
fig = px.line(df, x='date', y='price')
fig.update_xaxes(rangeslider_visible=True)

# Candlestick chart
import plotly.graph_objects as go
fig = go.Figure(data=[go.Candlestick(
    x=df['date'],
    open=df['open'],
    high=df['high'],
    low=df['low'],
    close=df['close']
)])
Multi-Plot Dashboards
from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(
    rows=2, cols=2,
    subplot_titles=('Scatter', 'Bar', 'Histogram', 'Box'),
    specs=[[{'type': 'scatter'}, {'type': 'bar'}],
           [{'type': 'histogram'}, {'type': 'box'}]]
)

fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6]), row=1, col=1)
fig.add_trace(go.Bar(x=['A', 'B'], y=[1, 2]), row=1, col=2)
fig.add_trace(go.Histogram(x=data), row=2, col=1)
fig.add_trace(go.Box(y=data), row=2, col=2)

fig.update_layout(height=800, showlegend=False)

Integration with Dash

For interactive web applications, use Dash (Plotly's web app framework):

uv pip install dash
import dash
from dash import dcc, html
import plotly.express as px

app = dash.Dash(__name__)

fig = px.scatter(df, x='x', y='y')

app.layout = html.Div([
    html.H1('Dashboard'),
    dcc.Graph(figure=fig)
])

app.run(debug=True)  # Dash >= 3 (current 4.x): run_server() was removed; use app.run()

Plotly 7 changes (August 2026)

Plotly 7.0 moved to plotly.js 4 and removed long-deprecated APIs. When older code fails:

  • px.scatter_mapbox / density_mapbox / choropleth_mapbox / line_mapbox and the go.*mapbox traces are gone — use px.scatter_map, px.density_map, px.choropleth_map, px.line_map (MapLibre, map_style=, no token).
  • Deprecated figure-factory functions were removed (create_annotated_heatmap, create_distplot, create_gantt, create_facet_grid, create_scatterplotmatrix, create_violin, create_candlestick, create_ohlc, and others). Use Plotly Express instead: px.imshow(z, text_auto=True), px.histogram(..., marginal='rug'), px.timeline, px.scatter_matrix, px.violin, go.Candlestick/go.Ohlc. ff.create_dendrogram, create_quiver, create_streamline, create_table, create_trisurf, and create_ternary_contour remain.
  • Static export supports only Kaleido >= 1 (no Orca), and the engine= argument to write_image/to_image was removed.
  • Color strings: rgb()/rgba() with 0–1 fractional channels and hsv() are no longer supported; newer forms such as rgba(255 0 0 / 0.5), #ff0000aa, and oklch() now work.
  • New go.Quiver trace for vector fields.

Reference Files

Additional Resources

Comments

Markdown supported