Skip to content

Matplotlib Mini Project (EDA charts pack)

Goal

Create a reusable set of plots you can apply to any dataset:

  • Histogram (distribution)
  • Bar chart (category counts)
  • Line plot (trend)
  • Scatter plot (relationship)

This mirrors how McKinney approaches exploratory data analysis (EDA) in the book: before modelling anything, look at the shape of your data (histogram), how categories compare (bar chart), how things move over time (line plot), and whether two variables relate (scatter plot). Four charts, four different questions.

diagram An EDA charts pack mermaid
Four standard questions about a dataset, each answered by one chart type.

Sample dataset

Sample data
import pandas as pd
 
# Small example you can replace with any CSV
df = pd.DataFrame({
    "date": pd.date_range("2025-01-01", periods=10, freq="D"),
    "orders": [120, 140, 130, 160, 155, 170, 180, 175, 190, 200],
    "city": ["Pune", "Delhi", "Pune", "Delhi", "Pune", "Mumbai", "Pune", "Delhi", "Mumbai", "Pune"],
    "amount": [100, 140, 110, 160, 130, 90, 180, 150, 120, 200],
})
Sample data
import pandas as pd
 
# Small example you can replace with any CSV
df = pd.DataFrame({
    "date": pd.date_range("2025-01-01", periods=10, freq="D"),
    "orders": [120, 140, 130, 160, 155, 170, 180, 175, 190, 200],
    "city": ["Pune", "Delhi", "Pune", "Delhi", "Pune", "Mumbai", "Pune", "Delhi", "Mumbai", "Pune"],
    "amount": [100, 140, 110, 160, 130, 90, 180, 150, 120, 200],
})

1) Histogram

Histogram
import matplotlib.pyplot as plt
 
plt.figure(figsize=(7, 4))
plt.hist(df["amount"], bins=8, edgecolor="black")
plt.title("Amount distribution")
plt.xlabel("Amount")
plt.ylabel("Count")
plt.tight_layout()
plt.show()
Histogram
import matplotlib.pyplot as plt
 
plt.figure(figsize=(7, 4))
plt.hist(df["amount"], bins=8, edgecolor="black")
plt.title("Amount distribution")
plt.xlabel("Amount")
plt.ylabel("Count")
plt.tight_layout()
plt.show()

2) Bar chart (counts)

Bar counts
import matplotlib.pyplot as plt
 
counts = df["city"].value_counts()
 
plt.figure(figsize=(7, 4))
plt.bar(counts.index, counts.values)
plt.title("Orders count by city")
plt.xlabel("City")
plt.ylabel("Count")
plt.tight_layout()
plt.show()
Bar counts
import matplotlib.pyplot as plt
 
counts = df["city"].value_counts()
 
plt.figure(figsize=(7, 4))
plt.bar(counts.index, counts.values)
plt.title("Orders count by city")
plt.xlabel("City")
plt.ylabel("Count")
plt.tight_layout()
plt.show()

3) Line plot (trend)

Trend
import matplotlib.pyplot as plt
 
plt.figure(figsize=(7, 4))
plt.plot(df["date"], df["orders"], marker="o")
plt.title("Orders trend")
plt.xlabel("Date")
plt.ylabel("Orders")
plt.xticks(rotation=20)
plt.tight_layout()
plt.show()
Trend
import matplotlib.pyplot as plt
 
plt.figure(figsize=(7, 4))
plt.plot(df["date"], df["orders"], marker="o")
plt.title("Orders trend")
plt.xlabel("Date")
plt.ylabel("Orders")
plt.xticks(rotation=20)
plt.tight_layout()
plt.show()

4) Scatter plot

Scatter
import matplotlib.pyplot as plt
 
plt.figure(figsize=(7, 4))
plt.scatter(df["orders"], df["amount"], alpha=0.7)
plt.title("Orders vs amount")
plt.xlabel("Orders")
plt.ylabel("Amount")
plt.tight_layout()
plt.show()
Scatter
import matplotlib.pyplot as plt
 
plt.figure(figsize=(7, 4))
plt.scatter(df["orders"], df["amount"], alpha=0.7)
plt.title("Orders vs amount")
plt.xlabel("Orders")
plt.ylabel("Amount")
plt.tight_layout()
plt.show()

Deliverable

Save some plots with plt.savefig(...)plt.savefig(...) and reuse this structure for your datasets.

Next

You’ve completed the Matplotlib phase — continue to the next phase to bring these charts together with pandas’ own .plot().plot() shortcuts.

🧪 Try It Yourself

Exercise 1 – Distribution of a column

Exercise 2 – Counts by category

Exercise 3 – Trend and relationship together

If this helped you, consider buying me a coffee ☕

Buy me a coffee

Was this page helpful?

Let us know how we did