Free course · Lesson 4 of 5
Data Visualization & Storytelling
In this lesson you will
- Choose a suitable chart for a message
- Make charts clear and honest
A chart is worth a thousand rows of data. Data storytelling is the art of turning complex numbers into visual narratives that decision-makers can act on immediately. The best visualizations are clear, honest, and focused — they answer a specific question and highlight the key insight.
- Line charts show trends over time (e.g., monthly malaria cases).
- Bar charts compare categories (e.g., aid received per region).
- Scatter plots reveal relationships between two numeric variables (e.g., income vs food security).
- Use Matplotlib and Seaborn for static charts, Tableau Public for interactive dashboards.
Practical Skill: Always label your axes, use a clear title, and add a caption explaining the insight. A chart without context is just decoration. Build your first dashboard in Tableau Public (free!) or Jupyter Notebooks.
Python (Matplotlib)
# Visualizing data with Matplotlib — clean and professional # Install: pip install matplotlib pandas import matplotlib.pyplot as plt import pandas as pd # Sample data: monthly clinic visits in South Sudan months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"] malaria_cases = [120, 145, 180, 210, 195, 160] hygiene_workshops = [5, 8, 12, 15, 13, 10] # Create a side-by-side figure fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4)) # --- Bar Chart: Malaria cases per month --- bars = ax1.bar(months, malaria_cases, color="#1D448A", width=0.6) ax1.set_title("Malaria Cases by Month", fontsize=13, fontweight="bold") ax1.set_xlabel("Month") ax1.set_ylabel("Cases") ax1.set_ylim(0, 250) # Add value labels on top of each bar for bar, val in zip(bars, malaria_cases): ax1.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 5, str(val), ha="center", fontsize=9, fontweight="bold") # --- Line Chart: Hygiene workshops over time --- ax2.plot(months, hygiene_workshops, color="#F2C035", marker="o", linewidth=2.5, markersize=8) ax2.set_title("Hygiene Workshops (Jan-Jun)", fontsize=13, fontweight="bold") ax2.set_xlabel("Month") ax2.set_ylabel("Workshops") ax2.set_ylim(0, 20) # Add data point labels for m, v in zip(months, hygiene_workshops): ax2.text(m, v + 0.5, str(v), ha="center", fontsize=9, fontweight="bold") plt.tight_layout() plt.show() print("Charts generated! The bar chart shows malaria spikes in Apr-May.") print("The line chart shows workshop frequency increasing over time.") print("Insight: More workshops correlate with fewer cases? Investigate!")
Practice exercise
Take a table of water sources by district and sketch the best chart to show which district relies most on unsafe sources, with a title that states the finding.
Key takeaways
- Choose the chart from the message
- Bar charts should start at zero and be sorted
- A title should say what the chart shows
Free self-study lesson — no certificate. For the full instructor-led program, see registration options.