Guide your Audience: Creating Compelling Narratives in your Presentation
This article is the second in a series on crafting technical presentations, encompassing three key concepts I use to create compelling addresses – know your audience, guide your audience, and prepare for responses. To read the first of these articles you can follow the link below:
Know Your Audience: A Guide to Preparing for Technical Presentations
The hallmark of a memorable presentation is a compelling Narrative. The presenter hooks the audience from the beginning, maintains a steady cadence in delivering their address, focuses on the key details, and has a clear resolution by the end of their story. It's no secret why this framework has such a universal appeal – narrative structures in storytelling can be found in every culture on Earth, transcending ethnic and economic backgrounds. They tap into fundamental aspects of human cognition and emotion, making them highly effective tools for communication, education, and persuasion. Furthermore, information presented in this narrative format is far easier to remember due to its structure, typically following a logical sequence – listeners are more likely to recall details when they are part of a story or form a recognisable pattern.
By organizing convoluted information into these storytelling structures, complex ideas can be simplified and presented in a coherent manner, making them easier to comprehend. Contextualising information in the form of a logical plot gives presenters a powerful method for drawing in their audience, keeping them engaged throughout, and ensuring that their address stays with them long after they leave the auditorium.
Guide your Audience
In this second article focused on technical presentations, I'll describe how to build a narrative structure into your presentations, and how to deliver this story to your audience in order to keep them engaged and receptive to your message. This will mainly come from the perspective of data delivery techniques such as adding narrative elements to visualisations, contextualising complex information with callouts and annotations – though I will also touch on keeping your address focused on your underlying message, and how to use tone to your advantage when delivering the data. Additionally, I will describe the different kinds of approaches used in narrative visualisation, and show a typical approach for developing a leading narrative using Matplotlib.
Guiding Principles
Get the basics right
Before diving into the techniques I typically use for narrative visualisation, let's first assert some guiding principles for preparing your presentation:
- Define Your Key Message: Establish the primary objective of your presentation from the outset – your key message encapsulates the fundamental idea you intend to convey, acting as the guiding principle for every aspect of your presentation. A clearly defined message clarifies your purpose and ensures that every slide, phrase, and visual element works in lockstep with each other, creating a unified and influential presentation.
- Organize Your Content: Well-organized presentations progress logically, leading your audience through a coherent sequence of ideas. Begin with a compelling introduction that captures their attention, followed by the body where your main points are discussed systematically, and conclude with a strong summary that reinforces your key message. Each section of your presentation should seamlessly lead to the next, providing a natural flow and enhancing the overall consistency of your message.
- Use Visuals Wisely: Visuals are powerful tools for conveying information in a presentation. When used judiciously, visuals such as charts and graphs can demonstrate your key points and enhance overall understanding. The key lies in selecting visuals that directly support your message, ensuring they are clear, pertinent, and easy to interpret. Visuals should function as essential components that complement your address, adding depth to your presentation. For data-heavy presentations, this is especially important— more on this point in the next section.
- Stay Focused: Respect the audience's time and attention, and resist the urge to stray off-topic or delve into unnecessary details. A focused presentation is concise, relevant, and direct – it demands clarity in thought and delivery, and avoids digressions that might weaken the impact of your message. This ensures that your audience receives the most important information from your address, reinforcing the significance of your core message.
Mastering the fundamentals of presentation delivery is no small thing – these basic guidelines form the backbone of an impactful presentation, facilitating communication between the speaker and listener. Now let's look at how to enhance the graphics in your presentations, by using narrative visualisation techniques to give context to your audience.
Introduce a Visual Narrative
A picture paints a thousand words
First, a definition – narrative visualisation (or NarViz) is the pairing of data visualisation with narrative techniques, combining techniques supporting storytelling as well as data visualisation. According to Edmond and Bednarz, there are 3 distinct trajectories for narrative visualisation:
- Leading Narrative: A leading narrative is a structured storyline which explicitly guides the audience's interpretation of the data. It's a clear and intentional narrative that drives the viewer's focus and understanding. The perspective of the narrator is the dominant viewpoint in this approach.
- Integrated Narrative: Integrated narratives weave a storyline subtly into the Visualization, allowing viewers to study and interpret the data while discovering the underlying narrative on their own. This approach to narration emphasises exploration – the viewer takes a pivotal role in uncovering the narrative for themselves, with minimal guidance involved. Business intelligence applications like PowerBI and Tableau are prime examples of this form of storytelling, where interactive dashboards allow the viewer to dive into the data on their own.
- Supporting Narrative: A supporting narrative provides additional context, explanations, or supplementary information that enhances the viewer's understanding of the data without imposing a specific storyline. Typically supporting narratives provide context without taking any particular viewpoint on the comtent— in this sense it's arguably not a form of narrative at all, as no specific perspective (narrator or viewer) is taken on the data.
When it comes to delivering your message to a wider audience, the traditional approach is to use a leading narrative – you (as the narrator) are in control of the story, and can dictate the perspective the audience takes on the data being presented.
By way of example, the following is a walkthrough of preparing a matplotlib graph on climate change data over the last century and a half, displayed in the form of a leading narrative. This data (along with a large trove of other climate data) is freely available for anyone to explore themselves on the website, Our world in Data. Additionally, the details of my own exploration of this data can be found on my github folder for this project, here. I will use this data to show how to iteratively build leading narrative elements into your visualisations, preparing the data to tell the story you want it to tell, and making it more comprehensible for the viewer.
First, let's create a simple line graph of the average global temperature and CO2 emissions over time using matplotlib, with separate axes for both to show a comparison between these data.
# Creating primary axis (CO2 emissions)
fig, ax1 = plt.subplots(figsize=(15, 9))
ax1.plot(climate_data['Year'], climate_data['CO₂ emissions (billions of tonnes)'],
color='steelblue',linewidth=2, label='CO2 emissions (billions of tonnes)')
ax1.set_xlabel('Year',weight='bold',fontsize=11)
ax1.set_ylabel('CO2 Emissions (Billions of Tonnes)',color='blue',weight='bold',fontsize=11)
# Adjusting gridlines on primary y-axis
ax1.grid(color='blue', linestyle='--', linewidth=0.5, alpha=0.3)
# Creating secondary y-axis (relative avg temp)
ax2 = ax1.twinx()
ax2.plot(climate_data['Year'], climate_data['avg temp'],
color='salmon', linewidth=2, label='Average Temperature (°C)')
ax2.set_ylabel('Average Temperature (°C)',color='red',weight='bold',fontsize=11)
# Setting x-axis limits for ax
ax1.set_xlim(1850, 2022)
# Setting y-axis limits for both ax1 and ax2
ax1.set_ylim(0, 1.15 * max(climate_data['CO₂ emissions (billions of tonnes)']))
ax2.set_ylim(0.999 * min(climate_data['avg temp']), 16.1)
# Combining legends for both axes
lines, labels = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax2.legend(lines + lines2, labels + labels2, loc='upper right',fontsize=10)
# Set title
plt.title('Global CO2 Emissions compared to Average Global Temperature, 1850-2021',weight='bold',fontsize=14)
# Show plot
plt.show()
Running this script, we get the following plot:
Looking at this graph, we can see the increase in average temperature appears to be correlated with increasing global emissions in CO2 – however this isn't immediately obvious to a passive observer, and requires some labour from the audience in seeing this trend. Let's introduce a trendline to this graph, by approximating a nonlinear function on each dataset. Numpy's polyfit function is perfect for applying this in python – the following code snippet is added to the original script to add these splines to the graphic (a coefficient of 3 was used after some trial and error, to get the closest line of best fit):
# Spline for CO2 data
theta1 = np.polyfit(climate_data['Year'],
climate_data['CO₂ emissions (billions of tonnes)'],3)
CO2_spline = theta1[3]+theta1[2]*pow(climate_data['Year'],
1)+theta1[1]*pow(climate_data['Year'],
2)+theta1[0]*pow(climate_data['Year'],3)
#plotting CO2 spline
ax1.plot(climate_data['Year'], CO2_spline,
color='blue', linestyle ='dashed', linewidth=2, label=None)
# Spline for temp data
theta2 = np.polyfit(climate_data['Year'],
climate_data['avg temp'],3)
temp_spline = theta2[3]+theta2[2]*pow(climate_data['Year'],
1)+theta2[1]*pow(climate_data['Year'],
2)+theta2[0]*pow(climate_data['Year'],3)
The increasing trends of both datasets are now more easily seen by the audience:
Looks good so far – but how to show a measure of goodness (or in this case, badness) in the data? Let's say you want to show the pre-industrial average temperature on the graph (used as a common standard in climate science) along with limits for incremental increases in average temperature (in this case +1, +1.5, and +2 degrees Celsius). These limits come from the Paris Climate Agreement, which mandates that countries work to keep global warming at no more than 1.5 degrees above pre-industrial levels. These can be introduced using the axhline function in matplotlib – an example of this can be seen below, added to the initial script:
# Adding horizontal constant line at 14C (pre-industrial mean temp)
ax2.axhline(y=14, color='black', linestyle='--',alpha=cnst_alpha)
pre_ind_label = 'Pre-industrial Temperatures'
ax2.text(1882,14.03,pre_ind_label,color='black',alpha=cnst_alpha)
#Adding horizontal constant line at 15.5C (+1.5C Mean Temp)
ax2.axhline(y=15, color='darkgoldenrod', linestyle='--',alpha=cnst_alpha)
increase_label1 = '+1°C increase'
ax2.text(1882,15.03,increase_label1,color='darkgoldenrod',alpha=cnst_alpha)
# Adding horizontal constant line at 15C (+1C mean temp)
ax2.axhline(y=15.5, color='red', linestyle='--',alpha=cnst_alpha)
increase_label2 = '+1.5°C increase'
ax2.text(1882,15.53,increase_label2,color='red',alpha=cnst_alpha)
#Adding horizontal constant line at 16C (+2C Mean Temp)
ax2.axhline(y=16, color='darkred', linestyle='--',alpha=cnst_alpha)
increase_label3 = '+2°C increase'
ax2.text(1882,16.03,increase_label3,color='darkred',alpha=cnst_alpha)
Based on these limits, we can see we're approaching an increase of 1 degree Celsius on the chart, with no sign of our global emissions slowing down – not good if we want to stay below the 1.5 degree Celsius limit laid out in the Paris climate agreement:
Similarly, let's say we want to show when some of the most important treaties and organisations on climate change occurred on our timeline – we can apply vertical constant lines using matplotlib's axvline function. In this instance, I chose to show the dates where the Intergovernmental Panel on Climate Change (IPCC) was formed, when the Kyoto Protocol was adopted, and when the Paris Climate Agreement was ratified:
#Adding vertical constant line at 1988 (IPCC)
plt.axvline(x=1988, color='darkgreen',linestyle='--',alpha=cnst_alpha)
IPCC_label='IPCC (1988)'
ax2.text(1986,13.5,IPCC_label,color='darkgreen',weight='bold',fontsize=10,rotation=90,alpha=cnst_alpha)
#Adding vertical constant line at 1995 (Kyoto)
plt.axvline(x=1997, color='darkgreen',linestyle='--',alpha=cnst_alpha)
kyoto_label='Kyoto (1997)'
ax2.text(1995,13.5,kyoto_label,color='darkgreen',weight='bold',fontsize=10,rotation=90,alpha=cnst_alpha)
#Adding vertical constant line at 2015 (Paris)
plt.axvline(x=2015, color='darkgreen',linestyle='--',alpha=cnst_alpha)
paris_label='Paris (2015)'
ax2.text(2013,13.5,paris_label,color='darkgreen',weight='bold', fontsize=10,rotation=90,alpha=cnst_alpha)
The graph now indicates when all these important events took place, as below, making it clear when governments decided to take some action on climate change:
Another way of showing important regions on either axis of a matplotlib graph is using the span function to show a range or period. For this graph, I decided to show parts of the timeframe commonly known as the Second Industrial Revolution (or Technological Revolution), as well as the proposed timeframe for the current period of human-driven climate change on Earth (the Anthropocene). To accomplish this, I applied the axvspan function to the graph, as can be seen in the snippet here:
# Specifying regions to shade on the x-axis
plt.axvspan(1870, 1910, alpha=0.1, color='darkorange',
label='Second Industrial Revolution')
plt.axvspan(1945, 2022, alpha=0.1, color='royalblue',
label='The Anthropocene')
The graph now shows these important periods of time in recent history, which feeds into the overall narrative of showing how human activity is linked to climate change.
Finally, suppose we want to call out key developments in the past two centuries which contributed to this increase in carbon emissions (and subsequently, global temperatures); this can be accomplished using annotations. Below, I've specified a number of key events and dates, then added these annotations to the graph and pointed out the average temperature for that year. Note that with a graph using multiple axes, it's necessary to specify which axis to apply the annotations to, as I've done below:
#adding callouts for key dates
# Points to annotate (x, y, annotation_text)
callouts = [(1886, climate_data.loc[climate_data['Year'] == 1886, 'avg temp'].values[0], 'Automobile ninvented'),
(1903, climate_data.loc[climate_data['Year'] == 1903, 'avg temp'].values[0], 'Airplane ninvented'),
(1921, climate_data.loc[climate_data['Year'] == 1921, 'avg temp'].values[0], 'Automobiles in Americanexceed 10 million'),
(1938, climate_data.loc[climate_data['Year'] == 1938, 'avg temp'].values[0], 'Rise in globalntemperatures proven;nOil discovered innSaudi Arabia'),
(1968, climate_data.loc[climate_data['Year'] == 1968, 'avg temp'].values[0], 'Melting ice caps npredicted'),
(1985, climate_data.loc[climate_data['Year'] == 1985, 'avg temp'].values[0], 'Ozone hole ndiscovered'),
(1994, climate_data.loc[climate_data['Year'] == 1994, 'avg temp'].values[0], '1st climate change ntreaty signed into law'),
(2003, climate_data.loc[climate_data['Year'] == 2003, 'avg temp'].values[0], 'European heatwave nkills 70,000+'),
(2021, climate_data.loc[climate_data['Year'] == 2021, 'avg temp'].values[0], 'EU climate lawnratified')
]
# Iterate over specified points and add minimal annotations
for point in callouts:
x_point, y_point, annotation_text = point
ax2.annotate(annotation_text, xy=(x_point, y_point), xytext=(x_point - 35, y_point + 0.7),
arrowprops=dict(arrowstyle='-', color='black'),
fontsize=9, weight='bold') # Set font size for annotation text
Now the graph tells a more informative story about what's happening to the climate, and why it's happening. The invention of the automobile and airplane during the Second Industrial Revolution, their mass adoption and subsequent discovery of vast quantities of oil in the Middle East, led to the beginning of the Anthropocene period by 1945. A steep increase in CO2 emissions and global temperature led to a number of alarming climate predictions and events, which prompted subsequent efforts by governments to contain and reduce climate change through legislation.
By adding annotations and structuring the data to aid comprehension, even the most convoluted topics can be easily understood by your audience. This is especially important when attempting to describe these concepts to a large group of people under a time constraint, as it is with most addresses – therefore using these leading narrative elements are crucial for an intelligent and insightful presentation.
Some Notes on Tone
Not what you say, but how you say it
Lastly, I'd like to take a few minutes to expand on tone when giving a presentation – this is an important point to ensure your audience gets the full meaning of what you're explaining to them. A 1967 study by Mehrabian asserts that only 7% of communication is verbal – 38% is based on vocal tone, and 55% is based on facial expressions. Therefore to convey your full message, be mindful of what tone you use, and what expression you're wearing when you say it.
In his book "Never Split the Difference", former FBI hostage negotiator Chris Voss talks about this concept called the "late night FM DJ voice" – a low and slow tone of voice ideal for the tense situations he's been a party to, which moves both the speaker and the listener into a calm and receptive frame of mind. You may wonder how the advice of an FBI negotiator is relevant to your presentations – this tone is often the kind of approach necessary when speaking to stakeholders on tense or contentious points, and a clear measured delivery is essential for making yourself clear while projecting a perception of calm collectedness to the room.
Following on from our earlier example of graphing climate change data – to a hypothetical audience, this information should be delivered in a sobering but optimistic tone to underpin the gravity of the situation, while also highlighting the steps taken so far and the work that still needs to be done. In this way, the audience takes away two key points from this address – that the climate emergency we face is a real and serious threat, and that there are actions that can still be done to mitigate or eliminate the threats posed by climate change.
Summary
To conclude, this article gave a high-level overview of the basic principles I use in preparing a presentation, which includes defining your key message, organising your key points, and staying on topic. I described the different approaches to telling a narrative from the data, before walking through key techniques on preparing a leading narrative using a matplotlib plot of climate data trends, to make the story behind the data more evident for the audience. Lastly, I gave some brief notes on tone when delivering this data to a prospective audience, ensuring the full measure of your message is delivered with the right cadence and emphasis. By incorporating these techniques into your presentation, you will have the tools necessary to properly guide your audience's understanding of the data, and ensure a lasting impact from your address.
References
[1] Edmond, C., & Bednarz, T. (2021). Three trajectories for narrative visualisation. Visual Informatics, 5(2021), 26–40.
[2] Met Office Hadley Centre. (2023). Average Temperature Anomaly, Global. Retrieved from https://ourworldindata.org/grapher/temperature-anomaly
[3] Global Carbon Budget (2022). Annual CO2 emissions. Retrieved from https://ourworldindata.org/co2-emissions
[4] Hansen, J., et al. (2010). Global Surface Temperature Change. Reviews of Geophysics, 48. Retrieved from http://onlinelibrary.wiley.com/doi/10.1029/2010RG000345/abstract (Accessed: 21st October 2023).
[5] United Nations. (2015). Paris Agreement. Article 2.1(a). Retrieved from https://unfccc.int/sites/default/files/english_paris_agreement.pdf (Accessed: 20th October 2023).
[6] United Nations, European Commission (n.d.). A Guide to Climate Change Negotiations. Retrieved from https://www.europarl.europa.eu/infographic/climate-negotiations-timeline/index_en.html (Accessed: 21st October 2023).
[7] Mokyr, J. (1998). The Second Industrial Revolution, 1870–1914. Retrieved from https://faculty.wcas.northwestern.edu/jmokyr/castronovo.pdf (Accessed: 21st October 2023).
[8] Chua, L., & Fair, H. (2019). Anthropocene. In F. Stein (Ed.), The Open Encyclopedia of Anthropology. Facsimile of the first edition in The Cambridge Encyclopedia of Anthropology. Retrieved from http://doi.org/10.29164/19anthro (Accessed: 22nd October 2023).
[9] Roos, J. (2022). 7 Gilded Age Inventions That Changed the World. Retrieved from https://www.history.com/news/most-important-gilded-age-inventions (Accessed: 22nd October 2023).
[10] Statista (1993). Number of Passenger Cars and Commercial Motor Vehicles in Use in the United States from 1900 to 1988. Retrieved from https://www.statista.com/statistics/1246890/vehicles-use-united-states-historical/ (Accessed: 22nd October 2023).
[11] UK Research and Innovation. (2021). A Brief History of Climate Change Discoveries. Retrieved from https://www.discover.ukri.org/a-brief-history-of-climate-change-discoveries/index.html (Accessed: 22nd October 2023).
[12] Mehrabian, A., & Wiener, M. (1967). Decoding of inconsistent communications. Journal of Personality and Social Psychology, 6(1), 109–114. https://doi.org/10.1037/h0024532
[13] Voss, C., & Raz, T. (2017). Never Split the Difference. Random House Business Books.