Decision framework for selecting the most effective visualization for your data and message.
What are you showing?
│
├── COMPARISON between groups
│ ├── Few categories (2-5) → Bar chart (vertical)
│ ├── Many categories (6+) → Bar chart (horizontal)
│ ├── Over time → Line chart (grouped)
│ └── Part of whole → Stacked bar or pie (only if 2-5 segments)
│
├── DISTRIBUTION of values
│ ├── Single variable → Histogram + KDE
│ ├── Compare distributions → Box plot or violin plot
│ ├── Exact percentiles matter → Box plot
│ └── Shape matters → Violin plot or ridgeline
│
├── RELATIONSHIP between variables
│ ├── Two numeric → Scatter plot + regression line
│ ├── Numeric vs categorical → Strip/swarm plot
│ ├── Many numeric pairs → Pair plot or correlation heatmap
│ └── Three variables → Scatter with color/size encoding
│
├── TREND over time
│ ├── One metric → Line chart
│ ├── Multiple metrics → Multi-line or small multiples
│ ├── Cumulative → Area chart
│ └── Seasonal patterns → Seasonal decomposition plot
│
└── COMPOSITION
├── At one point in time → Pie chart (≤5 segments) or treemap
├── Over time → Stacked area
└── Hierarchical → Treemap or sunburst
| Situation | Best Chart | Avoid |
|---|---|---|
| Comparing exact values | Bar chart | Pie chart |
| Showing trend | Line chart | Bar chart |
| Showing distribution | Histogram | Bar chart |
| Correlations | Scatter plot | Table |
| Part-of-whole (≤5 parts) | Pie/donut | Bar chart (sometimes) |
| Part-of-whole (>5 parts) | Treemap | Pie chart |
| Before/after comparison | Paired bar or slope chart | Grouped bars |
| Geographic data | Choropleth map | Bar chart by region |
1. Dual Y-axes — Almost always misleading. Use small multiples instead.
2. 3D charts — Never add depth for decoration. It distorts perception.
3. Pie charts with >5 segments — Humans can't accurately compare angles.
4. Truncated Y-axis without indication — Either start at 0 or clearly mark the break.
5. Rainbow color schemes — Use sequential (light→dark) for ordered data, categorical for groups.
When to use which test, what assumptions to check, and how to interpret results.
| Question | Data Type | # Groups | Normal? | Test |
|---|---|---|---|---|
| Are two means different? | Continuous | 2 | Yes | Student's t-test |
| Are two means different? | Continuous | 2 | No | Mann-Whitney U |
| Are 3+ means different? | Continuous | 3+ | Yes | One-way ANOVA |
| Are 3+ means different? | Continuous | 3+ | No | Kruskal-Wallis |
| Are proportions different? | Binary | 2 | N/A | Z-test for proportions |
| Are categories associated? | Categorical | 2+ | N/A | Chi-square test |
| Is there a linear relationship? | Continuous × 2 | N/A | Yes | Pearson correlation |
| Is there a monotonic relationship? | Ordinal/Continuous | N/A | No | Spearman correlation |
| Before/after same subjects? | Continuous | 2 (paired) | Yes | Paired t-test |
| Before/after same subjects? | Continuous | 2 (paired) | No | Wilcoxon signed-rank |
| Test | Effect Size | Small | Medium | Large |
|---|---|---|---|---|
| t-test | Cohen's d | 0.2 | 0.5 | 0.8 |
| ANOVA | Eta-squared | 0.01 | 0.06 | 0.14 |
| Chi-square | Cramer's V | 0.1 | 0.3 | 0.5 |
| Correlation | r | 0.1 | 0.3 | 0.5 |
| Mann-Whitney | rank-biserial | 0.1 | 0.3 | 0.5 |
Remember: P-value is NOT the probability the null is true. It's the probability of seeing data this extreme IF the null were true.
When running many tests, false positives accumulate:
| Test | Minimum per group | Ideal per group |
|---|---|---|
| t-test | 30 | 100+ |
| ANOVA | 20 per group | 50+ per group |
| Chi-square | 5 expected per cell | 20+ per cell |
| Correlation | 30 | 100+ |
| Regression | 10-20 per predictor | 50+ per predictor |