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.
flowchart TD A["New dataset"] --> B["Distribution? -> Histogram"] A --> C["Compare categories? -> Bar chart"] A --> D["Change over time? -> Line plot"] A --> E["Relationship between 2 vars? -> Scatter plot"]
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 coffeeWas this page helpful?
Let us know how we did
