--- name: plotly description: Interactive visualization library. Use when you need hover info, zoom, pan, or web-embeddable charts. Best for dashboards, exploratory analysis, and presentations. For static publication figures use matplotlib or scientific-visualization. license: MIT license metadata: skill-author: K-Dense Inc. --- # Plotly Python graphing library for creating interactive, publication-quality visualizations with 40+ chart types. ## Quick Start Install Plotly: ```bash uv pip install plotly ``` Basic usage with Plotly Express (high-level API): ```python 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 [reference/plotly-express.md](reference/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 [reference/graph-objects.md](reference/graph-objects.md) for complete guide. **Note:** Plotly Express returns graph objects Figure, so you can combine approaches: ```python 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 visualization) **3D Charts:** scatter3d, surface, mesh, cone, volume **Specialized:** sunburst, treemap, sankey, parallel coordinates, gauge For detailed examples and usage of all chart types, see [reference/chart-types.md](reference/chart-types.md). ### 2. Layouts and Styling **Subplots:** Create multi-plot figures with shared axes: ```python 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: ```python 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 [reference/layouts-styling.md](reference/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 ```python # Custom hover template fig.update_traces( hovertemplate='%{x}
Value: %{y:.2f}' ) # 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 [reference/export-interactivity.md](reference/export-interactivity.md). ### 4. Export Options **Interactive HTML:** ```python fig.write_html('chart.html') # Full standalone fig.write_html('chart.html', include_plotlyjs='cdn') # Smaller file ``` **Static Images (requires kaleido):** ```bash uv pip install kaleido ``` ```python fig.write_image('chart.png') # PNG fig.write_image('chart.pdf') # PDF fig.write_image('chart.svg') # SVG ``` For complete export options, see [reference/export-interactivity.md](reference/export-interactivity.md). ## Common Workflows ### Scientific Data Visualization ```python import plotly.express as px # Scatter plot with trendline 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 ```python # 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 ```python # 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 ```python 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): ```bash uv pip install dash ``` ```python 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_server(debug=True) ``` ## Reference Files - **[plotly-express.md](reference/plotly-express.md)** - High-level API for quick visualizations - **[graph-objects.md](reference/graph-objects.md)** - Low-level API for fine-grained control - **[chart-types.md](reference/chart-types.md)** - Complete catalog of 40+ chart types with examples - **[layouts-styling.md](reference/layouts-styling.md)** - Subplots, templates, colors, customization - **[export-interactivity.md](reference/export-interactivity.md)** - Export options and interactive features ## Additional Resources - Official documentation: https://plotly.com/python/ - API reference: https://plotly.com/python-api-reference/ - Community forum: https://community.plotly.com/