Data Visualization Best Practices for Marketers
Chart type is a claim about the data, not a style choice
Every chart type implicitly claims something about the relationship in the data, and picking the wrong one makes a false claim even with correct numbers. A line chart claims continuity and trend over time — using it for discrete, unordered categories implies a connection between them that doesn't exist. A pie chart claims parts of a single whole — using it to compare independent metrics across channels (which don't sum to a meaningful 100%) is a common and specifically marketing-report error. Picking a chart type starts with asking what relationship actually needs to be shown: trend over time (line), comparison across categories (bar), part-to-whole (stacked bar or, sparingly, pie — only when parts genuinely sum to a whole), or correlation between two variables (scatter).
Chart type decision guide
| What you're showing | Right chart | Common mistake |
|---|---|---|
| Trend over time | Line chart | Using a pie chart or bar chart with time as an unordered category |
| Comparing discrete categories (channels, campaigns) | Bar chart (horizontal if labels are long) | Pie chart with more than 4-5 slices, which becomes unreadable |
| Part-to-whole breakdown | Stacked bar (shows change in composition over time too) | Pie chart compared across multiple time periods side by side — hard to compare slice-to-slice across pies |
| Relationship between two metrics | Scatter plot | Dual-axis line chart, which visually implies a correlation strength that's really just an artifact of arbitrary axis scaling |
Dual-axis charts are the single most common distortion in marketing dashboards
Truncated axes and the zero-baseline rule
A bar chart's length is a visual proxy for magnitude, and that proxy only holds if the axis starts at zero. Truncating a y-axis to start at, say, 80% instead of 0% can make a 2-point difference look like a 300% visual difference in bar height — technically accurate numbers, wildly misleading visual impression. The zero-baseline rule is non-negotiable for bar charts specifically; line charts are more forgiving of a non-zero baseline when the goal is showing the shape of a trend rather than comparing absolute magnitude, but even then the axis range should be disclosed, not hidden.
// Lightweight checks to run before shipping a chart, applicable regardless
// of charting library (Recharts, Chart.js, Looker Studio, etc.)
const chartSanityChecks = {
barChartStartsAtZero: (axisMin: number) => axisMin === 0,
pieChartSliceCount: (slices: number) => slices <= 5,
dualAxisHasExplicitLabels: (leftLabel: string, rightLabel: string) =>
Boolean(leftLabel && rightLabel),
colorCountUnderSevenCategories: (seriesCount: number) => seriesCount <= 7,
// humans reliably distinguish ~6-7 categorical colors before confusion sets in
};Color as signal, not decoration
Color should encode meaning, not just make the chart visually varied. Using your brand's full color palette to differentiate seven channels in a bar chart adds no information beyond what position and label already provide, and actively competes for attention with color used meaningfully elsewhere (e.g. red reserved for "underperforming" or "over budget"). A disciplined approach: use a single accent color (or a sequential palette shade) for the primary series, gray out everything that's context rather than the focus, and reserve a distinct alert color (red/orange) exclusively for genuinely negative or out-of-threshold values so it retains its signal value.
If removing a gridline, legend, or decoration doesn't lose information, remove it
What's Next?
Individual chart discipline matters, but these choices compound across an entire dashboard — layout, information hierarchy, and what belongs on a single screen versus a drill-down are the next level of the same underlying skill.
I build these systems professionally.
Whether it's a RAG pipeline, analytics migration, or AI workflow — let's talk.