Bullet Charts for KPI Dashboards
Bullet charts display progress toward goals in a compact, linear format. They replace gauges and meters with a more space-efficient design that shows actual performance, targets, and qualitative ranges.
Bullet Chart Components
1. Qualitative ranges (background bars):
- Poor (red)
- Satisfactory (yellow)
- Good (green)
2. Actual performance (dark bar):
- Current achievement level
3. Target marker (vertical line):
- Goal or benchmark
Shows: Are we meeting our target? By how much?
Creating Bullet Charts in Python
import plotly.graph_objects as go
# Sales performance
actual = 85
target = 100
ranges = [60, 80, 100] # Poor, OK, Good
fig = go.Figure(go.Indicator(
mode="number+gauge+delta",
value=actual,
delta={'reference': target},
title={'text': "Sales Performance"},
gauge={
'shape': "bullet",
'axis': {'range': [None, 120]},
'threshold': {
'line': {'color': "black", 'width': 2},
'thickness': 0.75,
'value': target
},
'steps': [
{'range': [0, 60], 'color': "#ffcccc"},
{'range': [60, 80], 'color': "#ffffcc"},
{'range': [80, 100], 'color': "#ccffcc"}
],
'bar': {'color': "#333333"}
}
))
fig.show()
Multiple Bullet Charts
import plotly.graph_objects as go
from plotly.subplots import make_subplots
metrics = {
'Revenue': {'actual': 85, 'target': 100, 'max': 120},
'Profit': {'actual': 92, 'target': 90, 'max': 110},
'Customer Sat': {'actual': 78, 'target': 85, 'max': 100},
'Market Share': {'actual': 45, 'target': 50, 'max': 60}
}
fig = make_subplots(
rows=len(metrics),
cols=1,
subplot_titles=list(metrics.keys()),
vertical_spacing=0.15
)
for idx, (name, data) in enumerate(metrics.items(), 1):
fig.add_trace(go.Indicator(
mode="number+gauge",
value=data['actual'],
title={'text': name},
gauge={
'shape': "bullet",
'axis': {'range': [None, data['max']]},
'threshold': {
'line': {'color': "red", 'width': 2},
'value': data['target']
},
'bar': {'color': "darkblue"}
}
), row=idx, col=1)
fig.update_layout(height=600)
fig.show()
When to Use Bullet Charts
- KPI dashboards
- Performance scorecards
- Goal tracking
- Budget vs actual comparisons
- Space-limited reports
Bullet Charts vs Alternatives
| Gauge | Bullet Chart |
|---|---|
| Takes up lots of space | Compact, linear |
| Hard to compare multiple | Easy to stack and compare |
| Low data-ink ratio | High information density |
Best Practices
- Use consistent color scheme across all bullets
- Align bullets vertically for easy comparison
- Show actual values as numbers
- Make target line prominent
- Use 3-5 qualitative ranges
Pro Tip: Bullet charts are superior to gauges for dashboards—they show the same information in 1/4 the space. Use them when you need to display many KPIs compactly!
← Back to Visualization Tips