📖 Scenario: You are analyzing sales data for two different products over four quarters. You want to visualize the sales trends side by side using two subplots. Each subplot should have its own title and y-axis label to clearly show which product's sales are being displayed.
🎯 Goal: Create a figure with two subplots side by side. Plot the sales data for Product A in the first subplot and Product B in the second subplot. Customize each subplot with its own title and y-axis label.
📋 What You'll Learn
Create a list called quarters with values [1, 2, 3, 4].
Create two lists called sales_a and sales_b with sales data for Product A and Product B respectively.
Create a figure with two subplots side by side using plt.subplots() with 1 row and 2 columns.
Plot sales_a against quarters in the first subplot.
Plot sales_b against quarters in the second subplot.
Set the title of the first subplot to 'Product A Sales' and the y-axis label to 'Sales (units)'.
Set the title of the second subplot to 'Product B Sales' and the y-axis label to 'Sales (units)'.
Display the plot using plt.show().
💡 Why This Matters
🌍 Real World
Visualizing multiple related datasets side by side helps compare trends easily, such as sales of different products over time.
💼 Career
Data scientists and analysts often create customized subplots to present clear and informative visual reports to stakeholders.
Progress0 / 4 steps
1
Create sales data lists
Create a list called quarters with values [1, 2, 3, 4]. Create a list called sales_a with values [150, 200, 250, 300] for Product A sales. Create a list called sales_b with values [180, 210, 260, 310] for Product B sales.
Matplotlib
Hint
Use square brackets to create lists with the exact values given.
2
Create subplots figure
Import matplotlib.pyplot as plt. Create a figure and two subplots side by side using plt.subplots() with 1 row and 2 columns. Store the axes in a variable called axes.
Matplotlib
Hint
Use plt.subplots(1, 2) to create 1 row and 2 columns of subplots.
3
Plot sales data and customize subplots
Plot sales_a against quarters on the first subplot using axes[0].plot(). Plot sales_b against quarters on the second subplot using axes[1].plot(). Set the title of the first subplot to 'Product A Sales' using axes[0].set_title(). Set the y-axis label of the first subplot to 'Sales (units)' using axes[0].set_ylabel(). Set the title of the second subplot to 'Product B Sales' using axes[1].set_title(). Set the y-axis label of the second subplot to 'Sales (units)' using axes[1].set_ylabel().
Matplotlib
Hint
Use axes[index].plot() to plot on each subplot. Use set_title() and set_ylabel() to customize each subplot.
4
Display the plot
Use plt.show() to display the figure with the two customized subplots.
Matplotlib
Hint
Call plt.show() to display the figure window with your plots.
Practice
(1/5)
1. What is the correct way to change the title of the second subplot when using fig, axs = plt.subplots(2, 2)?
easy
A. Use plt.title('New Title')
B. Use axs[1].set_title('New Title')
C. Use fig.set_title('New Title')
D. Use axs[0, 1].set_title('New Title')
Solution
Step 1: Understand subplot indexing
With plt.subplots(2, 2), axs is a 2x2 array. The second subplot in the first row is at position [0, 1].
Step 2: Set title for specific subplot
Use axs[0, 1].set_title('New Title') to change only that subplot's title.
Final Answer:
Use axs[0, 1].set_title('New Title') -> Option D
Quick Check:
Indexing subplots by row and column = A [OK]
Hint: Use axs[row, col] to target specific subplot [OK]
Common Mistakes:
Using axs[1] instead of axs[0, 1]
Setting title on fig instead of axs
Using plt.title affects whole figure, not subplot
2. Which of the following is the correct syntax to change the x-axis label of the first subplot in a 1D array of subplots fig, axs = plt.subplots(3)?
easy
A. axs[1].set_xlabel('X Label')
B. axs[0].set_xlabel('X Label')
C. axs.set_xlabel('X Label')
D. fig.set_xlabel('X Label')
Solution
Step 1: Identify subplot indexing in 1D array
With plt.subplots(3), axs is a 1D array with indices 0, 1, 2. The first subplot is at index 0.
Step 2: Use set_xlabel on the correct subplot
Use axs[0].set_xlabel('X Label') to set the x-axis label of the first subplot.
A. IndexError because axs has shape (2,2) and index (2,1) is out of range
B. AttributeError because set_ylabel is not a valid method
C. SyntaxError due to wrong indexing syntax
D. No error, code runs fine
Solution
Step 1: Check axs shape and indexing
With plt.subplots(2, 2), axs shape is (2, 2), valid indices are 0 or 1 for each dimension.
Step 2: Identify invalid index
Indexing axs[2, 1] tries to access third row (index 2), which does not exist, causing IndexError.
Final Answer:
IndexError because axs has shape (2,2) and index (2,1) is out of range -> Option A
Quick Check:
Index out of range error = C [OK]
Hint: Check subplot array shape before indexing [OK]
Common Mistakes:
Assuming axs has more rows than created
Confusing AttributeError with IndexError
Using wrong indexing syntax
5. You want to create a 2x2 grid of subplots and set a different background color for each subplot: red, blue, green, and yellow respectively. Which code snippet correctly applies these colors?
hard
A. colors = ['red', 'blue', 'green', 'yellow']
fig, axs = plt.subplots(2, 2)
for ax, color in zip(axs.flat, colors):
ax.set_facecolor(color)
B. colors = ['red', 'blue', 'green', 'yellow']
fig, axs = plt.subplots(2, 2)
for i in range(4):
axs[i].set_facecolor(colors[i])
C. colors = ['red', 'blue', 'green', 'yellow']
fig, axs = plt.subplots(2, 2)
for i, j in range(2):
axs[i, j].set_facecolor(colors[i+j])
D. colors = ['red', 'blue', 'green', 'yellow']
fig, axs = plt.subplots(2, 2)
for ax in axs:
ax.set_facecolor(colors)
Solution
Step 1: Understand axs structure and iteration
With plt.subplots(2, 2), axs is a 2D array. Using axs.flat flattens it to 1D for easy iteration.
Step 2: Apply colors correctly
Using zip(axs.flat, colors) pairs each subplot with a color. Calling ax.set_facecolor(color) sets background color individually.
Final Answer:
Use axs.flat with zip and set_facecolor for each subplot -> Option A
Quick Check:
Flatten axs and zip with colors = A [OK]
Hint: Use axs.flat to loop all subplots in order [OK]
Common Mistakes:
Trying to index axs as 1D without flattening
Using axs as 2D but wrong color indexing
Passing full color list to set_facecolor
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.