Initial commit for plotly
This commit is contained in:
488
references/chart-types.md
Normal file
488
references/chart-types.md
Normal file
@@ -0,0 +1,488 @@
|
||||
# Plotly Chart Types
|
||||
|
||||
Comprehensive guide to chart types organized by category.
|
||||
|
||||
## Basic Charts
|
||||
|
||||
### Scatter Plots
|
||||
|
||||
```python
|
||||
import plotly.express as px
|
||||
fig = px.scatter(df, x='x', y='y', color='category', size='size')
|
||||
|
||||
# With trendlines
|
||||
fig = px.scatter(df, x='x', y='y', trendline='ols')
|
||||
```
|
||||
|
||||
### Line Charts
|
||||
|
||||
```python
|
||||
fig = px.line(df, x='date', y='value', color='group')
|
||||
|
||||
# Multiple lines from wide-form data
|
||||
fig = px.line(df, x='date', y=['metric1', 'metric2', 'metric3'])
|
||||
```
|
||||
|
||||
### Bar Charts
|
||||
|
||||
```python
|
||||
# Vertical bars
|
||||
fig = px.bar(df, x='category', y='value', color='group')
|
||||
|
||||
# Horizontal bars
|
||||
fig = px.bar(df, x='value', y='category', orientation='h')
|
||||
|
||||
# Stacked bars
|
||||
fig = px.bar(df, x='category', y='value', color='group', barmode='stack')
|
||||
|
||||
# Grouped bars
|
||||
fig = px.bar(df, x='category', y='value', color='group', barmode='group')
|
||||
```
|
||||
|
||||
### Pie Charts
|
||||
|
||||
```python
|
||||
fig = px.pie(df, names='category', values='count')
|
||||
|
||||
# Donut chart
|
||||
fig = px.pie(df, names='category', values='count', hole=0.4)
|
||||
```
|
||||
|
||||
### Area Charts
|
||||
|
||||
```python
|
||||
fig = px.area(df, x='date', y='value', color='category')
|
||||
```
|
||||
|
||||
## Statistical Charts
|
||||
|
||||
### Histograms
|
||||
|
||||
```python
|
||||
# Basic histogram
|
||||
fig = px.histogram(df, x='values', nbins=30)
|
||||
|
||||
# With marginal plot
|
||||
fig = px.histogram(df, x='values', marginal='box') # or 'violin', 'rug'
|
||||
|
||||
# 2D histogram
|
||||
fig = px.density_heatmap(df, x='x', y='y', nbinsx=20, nbinsy=20)
|
||||
```
|
||||
|
||||
### Box Plots
|
||||
|
||||
```python
|
||||
fig = px.box(df, x='category', y='value', color='group')
|
||||
|
||||
# Notched box plot
|
||||
fig = px.box(df, x='category', y='value', notched=True)
|
||||
|
||||
# Show all points
|
||||
fig = px.box(df, x='category', y='value', points='all')
|
||||
```
|
||||
|
||||
### Violin Plots
|
||||
|
||||
```python
|
||||
fig = px.violin(df, x='category', y='value', color='group', box=True, points='all')
|
||||
```
|
||||
|
||||
### Strip/Dot Plots
|
||||
|
||||
```python
|
||||
fig = px.strip(df, x='category', y='value', color='group')
|
||||
```
|
||||
|
||||
### Distribution Plots
|
||||
|
||||
```python
|
||||
# Empirical cumulative distribution
|
||||
fig = px.ecdf(df, x='value', color='group')
|
||||
|
||||
# Marginal distribution
|
||||
fig = px.scatter(df, x='x', y='y', marginal_x='histogram', marginal_y='box')
|
||||
```
|
||||
|
||||
### Error Bars
|
||||
|
||||
```python
|
||||
fig = px.scatter(df, x='x', y='y', error_y='error', error_x='x_error')
|
||||
|
||||
# Using graph_objects for custom error bars
|
||||
import plotly.graph_objects as go
|
||||
fig = go.Figure()
|
||||
fig.add_trace(go.Scatter(
|
||||
x=[1, 2, 3],
|
||||
y=[5, 10, 15],
|
||||
error_y=dict(
|
||||
type='data',
|
||||
array=[1, 2, 3],
|
||||
visible=True
|
||||
)
|
||||
))
|
||||
```
|
||||
|
||||
## Scientific Charts
|
||||
|
||||
### Heatmaps
|
||||
|
||||
```python
|
||||
# From matrix data
|
||||
fig = px.imshow(z_matrix, color_continuous_scale='Viridis')
|
||||
|
||||
# With graph_objects
|
||||
fig = go.Figure(data=go.Heatmap(
|
||||
z=z_matrix,
|
||||
x=x_labels,
|
||||
y=y_labels,
|
||||
colorscale='RdBu'
|
||||
))
|
||||
```
|
||||
|
||||
### Contour Plots
|
||||
|
||||
```python
|
||||
# 2D contour
|
||||
fig = px.density_contour(df, x='x', y='y')
|
||||
|
||||
# Filled contour
|
||||
fig = go.Figure(data=go.Contour(
|
||||
z=z_matrix,
|
||||
contours=dict(
|
||||
coloring='heatmap',
|
||||
showlabels=True
|
||||
)
|
||||
))
|
||||
```
|
||||
|
||||
### Ternary Plots
|
||||
|
||||
```python
|
||||
fig = px.scatter_ternary(df, a='component_a', b='component_b', c='component_c')
|
||||
```
|
||||
|
||||
### Log Scales
|
||||
|
||||
```python
|
||||
fig = px.scatter(df, x='x', y='y', log_x=True, log_y=True)
|
||||
```
|
||||
|
||||
### Image Display
|
||||
|
||||
```python
|
||||
import plotly.express as px
|
||||
fig = px.imshow(img_array) # img_array from PIL, numpy, etc.
|
||||
```
|
||||
|
||||
## Financial Charts
|
||||
|
||||
### Candlestick Charts
|
||||
|
||||
```python
|
||||
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']
|
||||
)])
|
||||
```
|
||||
|
||||
### OHLC Charts
|
||||
|
||||
```python
|
||||
fig = go.Figure(data=[go.Ohlc(
|
||||
x=df['date'],
|
||||
open=df['open'],
|
||||
high=df['high'],
|
||||
low=df['low'],
|
||||
close=df['close']
|
||||
)])
|
||||
```
|
||||
|
||||
### Waterfall Charts
|
||||
|
||||
```python
|
||||
fig = go.Figure(go.Waterfall(
|
||||
x=categories,
|
||||
y=values,
|
||||
measure=['relative', 'relative', 'total', 'relative', 'total']
|
||||
))
|
||||
```
|
||||
|
||||
### Funnel Charts
|
||||
|
||||
```python
|
||||
fig = px.funnel(df, x='count', y='stage')
|
||||
|
||||
# Or with graph_objects
|
||||
fig = go.Figure(go.Funnel(
|
||||
y=['Stage 1', 'Stage 2', 'Stage 3'],
|
||||
x=[100, 60, 40]
|
||||
))
|
||||
```
|
||||
|
||||
### Time Series
|
||||
|
||||
```python
|
||||
fig = px.line(df, x='date', y='price')
|
||||
|
||||
# With rangeslider
|
||||
fig.update_xaxes(rangeslider_visible=True)
|
||||
|
||||
# With range selector buttons
|
||||
fig.update_xaxes(
|
||||
rangeselector=dict(
|
||||
buttons=list([
|
||||
dict(count=1, label='1m', step='month', stepmode='backward'),
|
||||
dict(count=6, label='6m', step='month', stepmode='backward'),
|
||||
dict(count=1, label='YTD', step='year', stepmode='todate'),
|
||||
dict(count=1, label='1y', step='year', stepmode='backward'),
|
||||
dict(step='all')
|
||||
])
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
## Maps and Geographic
|
||||
|
||||
### Scatter Maps
|
||||
|
||||
```python
|
||||
# Geographic projection
|
||||
fig = px.scatter_geo(df, lat='lat', lon='lon', color='value', size='size')
|
||||
|
||||
# Mapbox (requires token for some styles)
|
||||
fig = px.scatter_mapbox(
|
||||
df, lat='lat', lon='lon',
|
||||
color='value',
|
||||
zoom=10,
|
||||
mapbox_style='open-street-map' # or 'carto-positron', 'carto-darkmatter'
|
||||
)
|
||||
```
|
||||
|
||||
### Choropleth Maps
|
||||
|
||||
```python
|
||||
# Country-level
|
||||
fig = px.choropleth(
|
||||
df,
|
||||
locations='iso_alpha',
|
||||
color='value',
|
||||
hover_name='country',
|
||||
color_continuous_scale='Viridis'
|
||||
)
|
||||
|
||||
# US States
|
||||
fig = px.choropleth(
|
||||
df,
|
||||
locations='state_code',
|
||||
locationmode='USA-states',
|
||||
color='value',
|
||||
scope='usa'
|
||||
)
|
||||
```
|
||||
|
||||
### Density Maps
|
||||
|
||||
```python
|
||||
fig = px.density_mapbox(
|
||||
df, lat='lat', lon='lon', z='value',
|
||||
radius=10,
|
||||
zoom=10,
|
||||
mapbox_style='open-street-map'
|
||||
)
|
||||
```
|
||||
|
||||
## 3D Charts
|
||||
|
||||
### 3D Scatter
|
||||
|
||||
```python
|
||||
fig = px.scatter_3d(df, x='x', y='y', z='z', color='category', size='size')
|
||||
```
|
||||
|
||||
### 3D Line
|
||||
|
||||
```python
|
||||
fig = px.line_3d(df, x='x', y='y', z='z', color='group')
|
||||
```
|
||||
|
||||
### 3D Surface
|
||||
|
||||
```python
|
||||
import plotly.graph_objects as go
|
||||
fig = go.Figure(data=[go.Surface(z=z_matrix, x=x_array, y=y_array)])
|
||||
|
||||
fig.update_layout(scene=dict(
|
||||
xaxis_title='X',
|
||||
yaxis_title='Y',
|
||||
zaxis_title='Z'
|
||||
))
|
||||
```
|
||||
|
||||
### 3D Mesh
|
||||
|
||||
```python
|
||||
fig = go.Figure(data=[go.Mesh3d(
|
||||
x=x_coords,
|
||||
y=y_coords,
|
||||
z=z_coords,
|
||||
i=i_indices,
|
||||
j=j_indices,
|
||||
k=k_indices,
|
||||
intensity=intensity_values,
|
||||
colorscale='Viridis'
|
||||
)]
|
||||
```
|
||||
|
||||
### 3D Cone (Vector Field)
|
||||
|
||||
```python
|
||||
fig = go.Figure(data=go.Cone(
|
||||
x=x, y=y, z=z,
|
||||
u=u, v=v, w=w,
|
||||
colorscale='Blues',
|
||||
sizemode='absolute',
|
||||
sizeref=0.5
|
||||
))
|
||||
```
|
||||
|
||||
## Hierarchical Charts
|
||||
|
||||
### Sunburst
|
||||
|
||||
```python
|
||||
fig = px.sunburst(
|
||||
df,
|
||||
path=['continent', 'country', 'city'],
|
||||
values='population',
|
||||
color='value'
|
||||
)
|
||||
```
|
||||
|
||||
### Treemap
|
||||
|
||||
```python
|
||||
fig = px.treemap(
|
||||
df,
|
||||
path=['category', 'subcategory', 'item'],
|
||||
values='count',
|
||||
color='value',
|
||||
color_continuous_scale='RdBu'
|
||||
)
|
||||
```
|
||||
|
||||
### Sankey Diagram
|
||||
|
||||
```python
|
||||
fig = go.Figure(data=[go.Sankey(
|
||||
node=dict(
|
||||
pad=15,
|
||||
thickness=20,
|
||||
line=dict(color='black', width=0.5),
|
||||
label=['A', 'B', 'C', 'D', 'E'],
|
||||
color='blue'
|
||||
),
|
||||
link=dict(
|
||||
source=[0, 1, 0, 2, 3],
|
||||
target=[2, 3, 3, 4, 4],
|
||||
value=[8, 4, 2, 8, 4]
|
||||
)
|
||||
)])
|
||||
```
|
||||
|
||||
## Specialized Charts
|
||||
|
||||
### Parallel Coordinates
|
||||
|
||||
```python
|
||||
fig = px.parallel_coordinates(
|
||||
df,
|
||||
dimensions=['dim1', 'dim2', 'dim3', 'dim4'],
|
||||
color='target',
|
||||
color_continuous_scale='Viridis'
|
||||
)
|
||||
```
|
||||
|
||||
### Parallel Categories
|
||||
|
||||
```python
|
||||
fig = px.parallel_categories(
|
||||
df,
|
||||
dimensions=['cat1', 'cat2', 'cat3'],
|
||||
color='value'
|
||||
)
|
||||
```
|
||||
|
||||
### Scatter Matrix (SPLOM)
|
||||
|
||||
```python
|
||||
fig = px.scatter_matrix(
|
||||
df,
|
||||
dimensions=['col1', 'col2', 'col3', 'col4'],
|
||||
color='category'
|
||||
)
|
||||
```
|
||||
|
||||
### Indicator/Gauge
|
||||
|
||||
```python
|
||||
fig = go.Figure(go.Indicator(
|
||||
mode='gauge+number+delta',
|
||||
value=75,
|
||||
delta={'reference': 60},
|
||||
gauge={'axis': {'range': [None, 100]},
|
||||
'bar': {'color': 'darkblue'},
|
||||
'steps': [
|
||||
{'range': [0, 50], 'color': 'lightgray'},
|
||||
{'range': [50, 100], 'color': 'gray'}
|
||||
],
|
||||
'threshold': {'line': {'color': 'red', 'width': 4},
|
||||
'thickness': 0.75,
|
||||
'value': 90}
|
||||
}
|
||||
))
|
||||
```
|
||||
|
||||
### Table
|
||||
|
||||
```python
|
||||
fig = go.Figure(data=[go.Table(
|
||||
header=dict(values=['A', 'B', 'C']),
|
||||
cells=dict(values=[col_a, col_b, col_c])
|
||||
)])
|
||||
```
|
||||
|
||||
## Bioinformatics
|
||||
|
||||
### Dendrogram
|
||||
|
||||
```python
|
||||
from plotly.figure_factory import create_dendrogram
|
||||
fig = create_dendrogram(data_matrix)
|
||||
```
|
||||
|
||||
### Annotated Heatmap
|
||||
|
||||
```python
|
||||
from plotly.figure_factory import create_annotated_heatmap
|
||||
fig = create_annotated_heatmap(z_matrix, x=x_labels, y=y_labels)
|
||||
```
|
||||
|
||||
### Volcano Plot
|
||||
|
||||
```python
|
||||
# Typically built with scatter plot
|
||||
fig = px.scatter(
|
||||
df,
|
||||
x='log2_fold_change',
|
||||
y='neg_log10_pvalue',
|
||||
color='significant',
|
||||
hover_data=['gene_name']
|
||||
)
|
||||
fig.add_hline(y=-np.log10(0.05), line_dash='dash')
|
||||
fig.add_vline(x=-1, line_dash='dash')
|
||||
fig.add_vline(x=1, line_dash='dash')
|
||||
```
|
||||
Reference in New Issue
Block a user