Understand the idea
A heatmap colours the values you supply in a matrix. Choose whether each cell should count records or summarize a measurement.
A small example
Two records in one category pair give count 2; if their ratings are 3 and 5, their mean rating is 4.
Follow the code
Apply the idea to the supplied table. Read from top to bottom; the final line displays the result.
import matplotlib.pyplot as plt
import seaborn as sns
fig, ax = plt.subplots(figsize=(6, 4))
matrix = pd.crosstab(df["club"], df["group"])
sns.heatmap(matrix, annot=True, fmt="d", cmap="Blues", ax=ax)
ax.set(title="Study club", xlabel="group", ylabel="club")
fig.tight_layout()
plt.show()What each part does
matrix = pd.crosstab(...)- Count each club-and-group combination into a matrix.
sns.heatmap(matrix, ...)- Colour the counts in that matrix; it does not count the raw rows itself.
annot=True, fmt="d"- Print each integer count inside its cell.
cmap="Blues"- Use a light-to-dark blue colour scale.
Your inputs
The editable setup on the right creates df. Run executes the setup and your work from top to bottom.
| student | club | hours | score | group |
|---|---|---|---|---|
| Ari | Art | 1 | 52 | A |
| Bo | Code | 3 | 71 | A |
| Cy | Art | 2 | 65 | B |
| Dee | Code | 4 | 82 | B |
| Eli | Art | 5 | 89 | A |
| Flo | Code | 3 | 76 | A |
| Gus | Art | 6 | 93 | B |
| Han | Code | 2 | 61 | B |
Your task · Follow
- Using df, build a crosstab of club by group, then sns.heatmap with annot=True, fmt="d", cmap="Blues".
- Chart: title "Study club"; x "group"; y "club".
Hint
A category-count matrix and a measurement-average matrix answer different questions.
Reveal solution
One way to do it. Keep any supplied setup in the editor and use this in the Your work section.
import matplotlib.pyplot as plt
import seaborn as sns
fig, ax = plt.subplots(figsize=(6, 4))
matrix = pd.crosstab(df["club"], df["group"])
sns.heatmap(matrix, annot=True, fmt="d", cmap="Blues", ax=ax)
ax.set(title="Study club", xlabel="group", ylabel="club")
fig.tight_layout()
plt.show()