On this page, you will find the most up-to-date and comprehensive listing of my "dos and don'ts" for designing great graphs, roughly ordered first by theme and then, within theme, by importance. However, to some extent, the order these recommendations are provided in is arbitrary; don't view later recommendations as definitely "lesser" just because they come later!
Use the Table of Contents below to quickly navigate to a section of interest.
Have an articulatable purpose and message for each graph within a product. Ensure each graph’s design aligns with its purpose and message, which should be spelled out in the caption or else in the plot (sub)title.
Cater to your audience’s expectations, capabilities, and expertise when designing graphs.
Don't use a graph to convey a small volume of data (N of ~10 or less, n < ~8 in 1+ subgroups, etc.). Opt for a table listing exact values in these cases, or else bin data together from poorly represented groups.
Remove all unnecessary elements from a graph and remove all unnecessary graphs from a product. Each figure should convey an important and unique message. Strive for no more than ~5 graphs per product. Show a single exemplary graph in favor of multiple, similar ones.
Visually emphasize elements related to the intended message relative to those of lesser/secondary importance using the visual channels of color hue, luminance, saturation, size, position, or weight. Typically, larger, darker, and brighter elements are inherently viewed as more important.
Place groups or elements to be contrasted close to one another and/or else connect them visually via lines, colors, shapes, etc. Add additional white space between groups not meant to be compared. Place the greatest visual weight on the most critical comparison(s), and place these in the top/left positions within the graph so they are encountered first, if possible.
In line with the “z-reading frame,” i.e., that readers tend to consume graphs in 1+ Z shapes starting from the top-left and ending in the bottom-right (c.f., Soegaard 2021), place important information in the top/left regions of graphs, such as legends, y-axis titles, subpanel designations, etc.
Confirm that a graph is a more efficient and effective medium for conveying results than a data file, text description, or table. Ensure graphs have a high data-to-space-occupied ratio. Recognize that graphs are primarily designed to convey trends, patterns, comparisons, and “vibes;” other media are better-suited for conveying exact values or large volumes of raw data precisely.
The vast majority (> 95%) of your graphs should be among those in the following list: bar graphs, histograms, pie charts, dot plots, line graphs, scatterplots, mosaic plots, word clouds, cladograms, boxplots, density plots, bar code plots, icon arrays, maps, and network arrays. Use unusual or specialized graph types only for appropriate audiences and in appropriate contexts.
Use bar graphs only for counts and frequencies; they’re inappropriate for continuous data (e.g., group means and error bars) because they mask important distributional information. Unless data represented by a bar are weight/mass/volume-related, use lines (“lollipop chart”) or dots (“dot plot”) rather than bars to use less “ink.”
Avoid heat maps; these are susceptible to the simultaneous contrast illusion and are thus very often misinterpreted. To reduce misinterpretation, ensure each tile/cell is completely surrounded by white space.
On density plots, consider adding marginal “bar codes” or dots to draw focus to elements in the tails of the distribution(s) that would otherwise be obscured by the y-axis's scale.
Use a pie chart only to convey proportions of a single whole, and only when the number of fractions is small (~8 or fewer). Order wedges by largest to smallest or otherwise logically. Facilitate comparisons by rotating wedges that are to be compared to be similarly oriented (comparing angles that are oriented in different directions is very imprecise).
Use stacked bar/area charts only to convey proportions of several related wholes, and only when the number of fractions per whole is small (~6 or fewer) and when comparisons are only intended between groups at the top or bottom of the bars/areas because comparing lengths of interior bars/areas is very imprecise and tedious. Alternatively, consider using a “dot plot” (c.f., Frees and Miller 1998) to represent these same data.
In scatterplots, when the distribution of either variable in isolation is important, include marginal histograms or bar code plots because x- and y-axis position are integral channels, i.e., they are hard for our visual perception systems to separate once combined (Franconeri et al. 2021).
Favor density plots or quantile dot plots (c.f., Franconeri et al. 2021) over error bars for representing uncertain, probabilistic outcomes. For decision-making contexts, favor using icon arrays to convey these data.
Do not use scatterplots when overplotting (points overlapping one another) is common. If overplotting is modest, make points semi-transparent or otherwise visibly overlapping to reveal density, or, when exact values are immaterial, apply a modest jitter to reduce overplotting. For data with substantial overplotting, consider a 2D density plot or plotting a random subset of the data instead.
Use connecting lines only to show linkage between data, such as that they come from the same group, treatment, individual, time period, location, etc.
Include a maximum of 2 categorical variables of no more than ~3 to 4 levels each in a mosaic plot.
Use a word cloud only when the number of categories is large (> ~10).
Don’t use distributional graphs (e.g., boxplots) when any group(s) has/have too few data (n < ~10).
Add a trendline only when a relationship of that shape and character has been predicted by a formal analysis described in the caption or surrounding text.
Consider the full range of visual channels available when designing graphs to select the best one possible for communicating each desired property. The most common and useful channels are: Position; size; angle; orientation; shape; color hue (amounts of red, green, and blue), luminance (brightness), and saturation (amount of gray); pattern/style; line width; transparency (opaqueness); enclosure; fuzziness; curvature; end and border type; and arrangement.
Use subpaneling like a channel to declutter a complex graph. Break one graph into several simpler ones according to levels of a categorical variable with few (< ~6) levels and/or to emphasize important comparisons.
For continuous data, favor x-/y-axis position over all other channels when determining exact values is critical to message because these are the most precisely interpreted channels for this task. When determining an average is critical to message, use color saturation instead for the same reason.
For categorical data, favor hue, luminance, saturation and shape over other channels. Use shapes further apart in perceptual space, i.e., that vary in openness, spikiness, and intersectionality (c.f., Franconeri et al. 2021) over default shapes such as circles, squares, or triangles, as research suggests these are not as easily and quickly parsed.
Ensure it’s never ambiguous which channel is mapped to which property (e.g., a box could convey information (or none at all) via its length, width, area, volume, fill color, outline color, outline style etc.).
Favor zero- or one-dimensional channels (e.g., length or position) over two- or-three dimensional ones (e.g., area or volume), as the former are more precisely perceived for many tasks.
Respect the preconceived notions held by most viewers that many visual channels have “correct” orientations, e.g., greater lengths/areas, darker and more opaque elements, further-right x-positions, further-up y-positions, and wider angles all are assumed to correspond with higher numerical values.
Whenever possible and necessary, make elements multifunctional (c.f., Frees & Miller 1998), e.g., have points convey data via their x-position, y-position, color, and size, instead of using multiple, separate elements to convey the same data. Multifunctionality is not a justification for making a graph too complex, however!
Exercise caution when using integral channels (i.e., those that are hard for our visual perception system to separate once combined). Examples include x- and y-position, heights and widths of rectangles, and red and green components of color hue.
For representing an amount of uncertainty (e.g., the size of a standard error), favor the channels of fuzziness, location, arrangement, and color saturation/hue (c.f., Franconeri et al. 2021). In particular, a value-suppressing color palette can be used, which suppresses uncertain values towards a neutral gray while more certain values freely range along a wider hue gradient.
By convention, use x-axis position to represent time, with later years oriented to the right.
Unless a graph can be interactively rotated to change the viewpoint, do not use 3D graphs (i.e., a z-position channel) because these are highly susceptible to misinterpretation and bias through the creator's selection of the viewpoint.
Recognize the existence of the so-called “curse of knowledge;” you cannot simulate the perspective of a naïve viewer of your graphs because you cannot unknow what you know. Your graphs will always be more self-evident to you than to others; design with this in mind.
Favor well-established graph schemas (the expectations, rules, and associations readers have for how info should be extracted from a graph with a given appearance) when they do not conflict with other recommendations. Novel graph types and unusual schemas generally burden viewers.
Use comparable design choices across subpanels within a figure and across figures within a product so readers must learn only a single set of “rules” with which to interpret them.
In general, if an element fails to convey necessary and unique information, replace it with white space or remove it entirely to free up working memory and reduce cognitive load.
In particular, avoid using so-called “chartjunk,” defined as any element (or design choice) that conveys no new important information, appears to convey more or different information than it does, distracts from the graph’s message, redundantly conveys information, or distorts the graph’s interpretation. Prominent examples include pseudo-3D effects, icons, background images, clipart, and color gradients used for style only.
Minimize the number of places where essential information is located (e.g., axes titles, plot title, legend, plotting area, caption, surrounding text, etc.) because visual integration across significant distance is difficult and “eye-jumping” is cognitively taxing.
Do not “double-map” channels, i.e., use 2+ distinct visual channels such as x-axis position and fill color, to convey the same information. One (debatable) exception is double-mapping color hue with a channel distinguishable in grayscale, but consider an alternative to hue first in such instances.
Minimize regionalisms, idioms, and jargon. Assume your audience is global and does not necessarily know what you know using the exact language you use. Do not assume they understand your country's or region's geography, biota, or customs any better than you understand all of theirs.
Ensure the number of intended pairwise or groupwise comparisons is manageable (~6 or fewer per graph). Especially when a large number of comparisons is intended, consider presenting the deltas (differences) of the groups directly (c.f., Franconeri et al. 2021).
Bin or eliminate groups of lesser importance or limited data if the number of groups is large (> ~6) to save working memory.
Recognize that so-called “axis break symbols,” indicating a discontinuity in an axis scale, are not universally used, obvious, common, nor self-identifying. Explicitly define their meaning and call attention to their existence in the caption.
Use as little encoding as possible within a graph, e.g., label treatments as “high nitrogen” and “low nitrogen” instead of using more coded terms you may use in the surrounding text to help figures “stand alone.”
If the venue allows, include an alt text description of each figure’s main takeaway for readers who use assistive technology.
Favor spelled-out terms over abbreviations unless these are widely recognizable (e.g., “wgt.” for “weight” or “pct.” for “percent”).
Use scientific names in lieu of common names.
Never consider color hue your first choice of visual channel; hue is, simply put, difficult to use effectively and accessibly and is also one of the most perceptually inaccurate channels for many tasks.
When using color hue, favor muted (i.e., desaturated or grayed) color tones. Avoid bright and uncomplimentary colors as well as colors too similar to that of their background.
Recognize that ~4% of humans have some color-vision impairment, and color sensitivity declines with age. When using color hue as a visual channel (instead of for emphasis), use only colorblind-friendly palettes (e.g., viridis).
Ensure all graphs are equally interpretable in grayscale when they incorporate color. If necessary, whenever colors are indistinguishable in grayscale or with color vision impairment, double-map a second channel (most often saturation, but alternatively size, shape, line type, etc.) to the same data as color.
Don’t use the so-called “rainbow” palette because:
It’s not colorblind-friendly,
It’s not intuitively ordered,
It causes readers to see “breakpoints” in the data that may not actually exist,
Brighter colors like yellow are often viewed as “higher” than orange or red despite falling in the middle of the gradient, and
It makes rates of change feel variable.
When using more than two color hues, use tools (e.g., ColorBrewer) to find colors that are readily contrasted from each other and from the background (i.e., are further apart in perceptual space). Don’t use more than ~6 colors per graph.
When using color, align color choices with universal cultural expectations or, at least, don't choose colors that conflict with common cultural expectations (e.g., blue is universally appropriate for water on a map, whereas red is not universally seen as “bad”).
Because color hue and luminance are evaluated relatively rather than absolutely when other colors/luminances are around (simultaneous contrast illusion), don’t plot colors/luminances on top of or within other colors/luminances.
Make all text large (just shy of ridiculously so) relative to final image size.
Make all text black or else ensure text colors have 70%+ contrast against their respective backgrounds.
Use non-black text only to echo a pre-existing mapping of color to a discrete variable. Favor bolding or larger size for emphasis over color hue, italics, underlining, etc.
If varying text sizes, order these as follows: Plot title ≥ plot subtitle ≥ axis and legend titles ≥ axis and legend labels ≥ text annotations and data labels.
Whenever possible, orient text horizontal, right-side up, and reading left-to-right. Otherwise, place text at a slight upward angle (between 25° and 45°). Otherwise, rotate text 90°. Do not place text at other angles, and do not use stacked text alignment.
Separate text elements from each other with white space, otherwise placing text as close to what it labels as possible.
Use sans serif typefaces (e.g., Arial) whenever possible. Do not use more than one type face per graph.
Use capital letters for points, data labels, subpanel labels, or significance designators in favor of lowercase letters or a mixture of cases as some upper- and lowercase letters are easily confused in some typefaces (e.g., capital I (i) and lowercase l (L)).
Use text data labels only when the overlaps between labels and between labels and data are minimal and when labels can be brief and placed very close to their respective data. Which points bear which labels shouldn’t be ambiguous; use leader lines when a few of these could resolve ambiguity. Consider whether all points vs. only points central to the message should be labeled.
Use letters as significance designators only when these can be consistently located in the same “void space” within the plotting area across all similar graphs/panels. Do not use letters to denote significance in multi-panel graphs that also use letters to identify their subpanels.
In almost all circumstances, the best plotting area background is solid white.
Make all important elements within the plotting area large (just shy of ridiculously so) relative to final image size. Different elements can vary in size according to an importance hierarchy.
Make gridlines (if used) faint (e.g., 30% gray on a white background), use them only in directions where exact numerical values need to be read, and make them only as frequent as necessary (e.g., using major but not minor gridlines). Do not use gridlines when they interfere with reading data. Consider whether targeted reference lines at specific values could suffice in place of regular gridlines.
Restrict use of annotations within the plotting area to only those that enhance the graph’s message non-redundantly, can be placed in “void space” away from all data, and aren’t merely decorative.
Explicitly define what the lengths of error bars (if used) signify. Favor two-tiered error bars, which indicate more than one measure (e.g., standard deviation and 95% Confidence Interval, c.f., Boers 2018). Consider, as an alternative to error bars in simple comparisons, plotting a “null zone,” (c.f., Boers 2018), a region in which means would fall if not significantly different.
Never extend axis tick marks (if used) into the plotting area.
If implying/arguing for a cause-and-effect or independent-dependent-variable relationship, favor mapping the causal/independent variable to the horizontal (x) position channel and the effect/dependent variable to the vertical (y) position channel, as this is convention.
Give x- and y-axis lines greater width/visual weight than all other lines except those of importance located within the plotting area (if any). Omit top and right bounding lines on the plotting area unless:
These bear separate axes to their counterparts (rare),
These bear graduations for ease of reading exact values positioned far from the other axis line (uncommon), or
The graph is a subpanel in a grid wherein units and scale in that direction are shared between subpanels (uncommon).
Reference units in axis titles whenever these are simple enough to summarize succinctly. Use the most interpretable and/or shortest and simplest units available (e.g., if thousands of meters and kilometers are conceptually equivalent, use the latter).
Separate axes titles from axis labels with white space, and separate labels from each other with white space, thinning label density as needed (axes rarely need more than ~6 labels).
Choose limits for your x- and y-axes (and all other numeric scales) first to encompass all data, second to not distort your data (e.g., by making a relationship look more significant than it is), and third to not generate excessive void space within the plotting area. In general, include the “null hypothesis value” (often, but not always, 0) within the axes limits.
Eliminate self-evident axis titles (e.g., when labels are clearly “Years” or “Treatment groups” already, a title stating this would be redundant).
Sort categorical data logically (e.g., according to a trend, alphanumerically, temporarily, etc.) along axes and within legends for ease of scanning.
Phrase axis titles as close to human-readable sentence fragments as possible without exceeding ~50 characters.
Do not transform an axis (e.g., log-transformation) unless:
Your audience expects it and can reasonably interpret data in that scale,
The transformation aligns with a formal analysis described in the caption or surrounding text,
Any relationship shown follows the proposed pattern on the transformed scale (e.g., a curvilinear relationship looks expectedly linear on the log scale), and
Doing so doesn’t distort the data or create excessive void space within the plotting area.
Avoid the use of secondary x-/y-axes unless the information they convey is both simple and important to the graph’s message.
Ensure all axes and scales have labels at both ends of their axis lines/continua, even if doing so requires extending the limits modestly beyond the range of your data. Otherwise, your scale labels will look incomplete and your graph will be harder to interpret.
Make axis tick marks (if used) thin and modest in length—just sizable enough to be noticeable but not distracting.
Whenever possible, orient the y-axis title and labels horizontally. Place the y-axis title in one or two lines, left-justified, directly above the y-axis. Otherwise, place it horizontally, centered vertically, within the margin to the left of the y-axis line, using a new line for every word. Otherwise, place it as above, but in a single line rotated at a 90° angle (which is standard, but more difficult to read than the previous two options).
If x-axis labels are long, orient them horizontally, on multiple lines (each), if necessary. Otherwise, orient them at an angle between 25 and 75 degrees. Otherwise, alternate them within two “rows” beneath the x-axis line. If convention allows, a variable with long labels can be mapped to y-axis position instead of x-axis position to more easily orient labels horizontally.
Whenever possible, eliminate legends by directly labeling groups within the plotting area. Otherwise, favor placing a legend as a stripe, centered horizontally, in the margin above the plotting area, instead of placing the legend in the margin to the right of the plotting area, centered vertically (the default placement in most software). Do not place a legend within the plotting area unless there is ample void space to locate it away from all other data.
In almost all circumstances, the best legend area background is solid white.
Ensure legend symbols mimic those of the data they represent exactly, excepting that legend symbols can be enlarged to enhance readability.
Provide white space between the legend title and the key area and between individual legend keys.
Sort legend keys for a categorical variable according to the order a reader would most likely encounter those groups within the plotting area or otherwise logically.
Wrap long legend labels and titles onto multiple lines, if needed.
Include a reference to the graph’s purpose and/or to the key elements/trends/messages contained in the graph (especially if these are not already visually emphasized). These references needn’t be longer than a sentence each.
Include information in the caption about the time, location, and basic methodology behind the data shown. Present only a brief summarization (2 sentences maximum) of the relevant methods used to collect the data. Don’t recap the methods in greater detail.
If not self-evident from the graph itself, clarify in the caption:
How subpanels differ (if used),
What all abbreviations stand for (if any),
What all units and scales are,
How all derived or transformed data were generated (if applicable),
What all visual channels represent,
How any statistics shown were generated (including those represented by error bars),
Sample/group sizes, and
How so-called outliers are represented and defined (if applicable).
Define, in the caption, all terms used in the figure, even if they are already defined in the surrounding text—figures should “stand alone” (i.e., be “meme-able”). Likewise, ensure no pertinent information is presented solely in a figure or its caption.
If specific comparisons are intended, highlight these in the caption if they are not already visually emphasized.
Don’t interpret the graph (i.e., evaluate its meaning or significance subjectively) in the caption. Stick to "the facts” only.
Don’t include irrelevant information in a figure caption.
Don’t state the type of graph in the caption unless it’s a type likely to be new to your audience.
Don’t reference the surrounding text or another figure or table in a figure caption in lieu of presenting the pertinent information. That is, do not make the reader go elsewhere to find the information needed to interpret the figure successfully.
If the data presented are from an outside source, cite that source in the caption.
Favor programmatic software (e.g., R or Python) for making graphs reproducibly over other graphics software. Avoid performing presentation-related manipulations manually in image-editing software such as Photoshop or Powerpoint.
Ensure the minimum resolution of your final graph files is at least 300+ dots per inch (DPI).
Ensure your final graph’s width is equal to that of a single manuscript page column, that of two columns, or that of a whole page without distortion or creating excessive white space.
When possible, save final graphs in a vector-based format (e.g., PDF, SVG, EPS).
Lock the aspect ratio to one that does not result in distortion of the trend/pattern akin to that caused by an inappropriate y-axis scale.
Accept that great graph design is fundamentally iterative and experimental. Few graphs are exceptional that accept the defaults in most software; fewer still are exceptional without repeated cycles of feedback and iteration. Have a “beta tester” who will critically critique your graphs.
It’s not improper to emphasize a particular message with a graph’s design; it can be improper to not do so, if it disrespects a reader's time or makes it harder for them to evaluate the merits of your message.
It’s not improper to visually deemphasize secondary information, e.g., about distribution, outliers, uncertainty, etc. in your graphs, but it is often improper to suppress that information entirely (unless that level of complexity would be too high for your audience).
It’s not necessarily improper to not include graphs showing contrary or inconclusive results in a product, but it is almost certainly improper to fail to present such results entirely. Great scientists do not hide such results; they integrate them into their narrative.
Proofread all graphs as carefully as you would the rest of the product. In particular, ensure no elements overlap or clip into each other.
Let your data and analyses drive your choice of axis scales and limits, not aesthetic considerations like “what looks cleanest” or what makes patterns look more or less prominent.
Use consistent capitalization (either “Sentence case” or “Title Case”) throughout your graphs. Use capital letters only when convention necessitates (e.g., for proper nouns, abbreviations, significant words in Title Case, etc.).
Avoid using plot titles and subtitles. If used, ensure these do not repeat the caption or the axes titles. If using them, favor using them to convey the graph’s purpose and/or message or to differentiate subpanels.
Include significance codes, error bars, trendlines, etc. only if they correspond to a formal analysis described in the caption or surrounding text.
When a prediction is uncertain and important for decision-making, communicate that uncertainty in your graphs in some way, even if doing so increases complexity.
Using a so-called “axis break symbol” is insufficient justification for stretching or shrinking the x-/y-axis limits in a way that distorts the pattern/trend presented.