Data Science Starter · free course

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.

Worked exampleBeautiful Bar Chart & Line Chart

Python (Matplotlib)

Python
# 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
In the full program Module 4: Visualisation and Data Storytelling See how this topic is taught in depth, with practical activities and an assessment.

Free self-study lesson — no certificate. For the full instructor-led program, see registration options.