| Statistic | Value |
|---|---|
| Mean(x) | 54.26 |
| Mean(y) | 47.83 |
| Standard deviation(x) | 16.77 |
| Standard deviation(y) | 26.94 |
| Correlation(x, y) | -0.06 |
24 March 2026
Data visualisation specialist, mainly working with R, Python, and D3.js.
Background in statistics, operational research, and data science consultancy.
Co-author of Royal Statistical Society’s Best Practices for Data Visualisation guidance.



In this session we will cover…
why you should visualise data;
choosing a chart type;
some guidelines for making better charts;
examples of good and bad charts!
Data visualisation has two main purposes:

| Statistic | Value |
|---|---|
| Mean(x) | 54.26 |
| Mean(y) | 47.83 |
| Standard deviation(x) | 16.77 |
| Standard deviation(y) | 26.94 |
| Correlation(x, y) | -0.06 |


Grab attention
Visualisations stand out. If a reader is short on time or uncertain about whether a document is of interest, an attention-grabbing visualisation may entice them to start reading.
Improve access to information
Textual descriptions can be lengthy and hard to read, and are frequently less precise than a visual depiction showing data points and axes.
Summarise content
Visual displays allow for summarising complex textual content, aiding the reader in memorising key points.
John Snow collected data on cholera deaths and created a visualisation where the number of deaths was represented by the height of a bar at the corresponding address in London.
This visualisation showed that the deaths clustered around Broad Street, which helped illustrate the cause of the cholera transmission, the Broad Street water pump.
Snow. 1854.

Data visualisations must serve a purpose.
Ask yourself:
Detailed, accurate numbers?
Or the big picture message?


Correlation: The relationship between two variables.
Deviation: The difference between a value and an average or another value.
Distribution: How data values are spread for a variable.
Geography: The pattern of data across different locations or areas.
Magnitude: The size of values.
Parts of a whole: The relative sizes of components within a whole.
Ranking: The position of data within a hierarchy or scale.
Time: How a value changes over time.





What value does the bar represent?




Alternatives to spaghetti:





Some alternatives:













Source: Georgia Department of Public Health
Default:

Magnitude ordered:

Naturally ordered:

In groups, discuss the following chart. What is good and bad about it?
Source: commonslibrary.parliament.uk/general-election-2019-how-many-women-were-elected available under Open Parliament Licence.





Colours should serve a purpose, e.g. discerning groups of data
Colours can highlight or emphasise parts of your data.
Not always the most effective for, e.g. communicating differences between variables.
Different types of colour palettes…
… for different types of data.





Example: red and blue used to show hot and cold

Tip: never switch to the opposite meaning!
Example: pink and blue used to show women and men

Tip: think about colour associations.
“7 out of 8 female readers might not be particularly appreciative of [being represented by pink].”
Source: visualisingdata.com


Font size: larger fonts are (usually) better
Font colour: ensure sufficient contrast
Font face: highlight text using bold font, avoid italics
Tip: Check the contrast of the text colour against the background colour with webaim.org/resources/contrastchecker
Font family:

Tip: If there’s something specific you want someone to look at, a big arrow pointing at it helps.

Source: Scottish Government | Chart: ONS

Source: Scottish Government | Chart: ONS
Just because you can, doesn’t mean you should.

Here’s a chart. You have 10 minutes to improve it as much as you can.


Hints:
scale_fill_manual() to change the colourscoord_flip() to place category names on y-axislabs() to add some textlibrary(ggtext)
g <- g +
theme_minimal(base_size = 15) +
theme(
legend.position = "top",
# Clean up y axis
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
panel.grid.major.y = element_blank(),
# Wrap, embolden title
plot.title = element_textbox_simple(
face = "bold"
),
strip.text = element_text(
face = "bold",
hjust = 0
)
)
g






ONS Data Visualisation Guidance: service-manual.ons.gov.uk/data-visualisation
RSS Best Practices for Data Visualisation Guidance: rss.org.uk/datavisguide
Data Visualisation Resources: nrennie.rbind.io/data-viz-resources
The Art of Data Visualization with ggplot2: nrennie.rbind.io/art-of-viz

Questions?
nicola-rennie nrennie nrennie nrennie.rbind.io