Sometimes you want to show multiple charts in one figure but with different sizes. This helps highlight important data or save space.
Unequal subplot sizes in Matplotlib
fig = plt.figure() ax1 = fig.add_axes([left, bottom, width1, height1]) ax2 = fig.add_axes([left2, bottom2, width2, height2])
The add_axes method takes a list of 4 numbers: [left, bottom, width, height].
All values are between 0 and 1 and represent the fraction of the figure size.
fig = plt.figure() ax1 = fig.add_axes([0.1, 0.1, 0.7, 0.8]) # big plot ax2 = fig.add_axes([0.85, 0.1, 0.1, 0.8]) # narrow side plot
fig = plt.figure() ax1 = fig.add_axes([0.1, 0.5, 0.8, 0.4]) # top plot ax2 = fig.add_axes([0.1, 0.1, 0.35, 0.3]) # bottom left ax3 = fig.add_axes([0.55, 0.1, 0.35, 0.3]) # bottom right
This code creates a figure with one large plot on the left and two smaller plots stacked on the right side. Each plot shows a different function.
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 100) y1 = np.sin(x) y2 = np.cos(x) y3 = np.tan(x) / 10 # scaled down for visibility fig = plt.figure(figsize=(8, 5)) # Big main plot ax1 = fig.add_axes([0.1, 0.3, 0.6, 0.6]) ax1.plot(x, y1, label='sin(x)') ax1.set_title('Main Plot: sin(x)') ax1.legend() # Smaller side plot ax2 = fig.add_axes([0.75, 0.6, 0.2, 0.3]) ax2.plot(x, y2, 'r', label='cos(x)') ax2.set_title('Side Plot: cos(x)') ax2.legend() # Smaller bottom plot ax3 = fig.add_axes([0.75, 0.3, 0.2, 0.2]) ax3.plot(x, y3, 'g', label='tan(x)/10') ax3.set_title('Bottom Plot: tan(x)/10') ax3.legend() plt.show()
Use add_axes for precise control of subplot size and position.
Coordinates are fractions of the figure size, so 0.1 means 10% from the left or bottom.
Remember to adjust figsize for overall figure size to keep plots clear.
You can create subplots of different sizes using fig.add_axes().
Specify position and size as fractions of the figure with [left, bottom, width, height].
This helps highlight important plots or save space in your figure.
Practice
matplotlib?Solution
Step 1: Understand subplot size purpose
Unequal subplot sizes allow some plots to be larger, drawing more attention.Step 2: Compare options
Only To highlight important charts by giving them more space mentions highlighting important charts by size, which is the main advantage.Final Answer:
To highlight important charts by giving them more space -> Option CQuick Check:
Unequal sizes highlight key charts [OK]
- Thinking all subplots must be equal size
- Confusing size with color or number of plots
- Assuming unequal sizes reduce charts
gridspec_kw in plt.subplots()?Solution
Step 1: Identify correct parameter for horizontal subplots
For 1 row and 2 columns, use 'width_ratios' to set horizontal size ratios.Step 2: Match ratios to subplot layout
plt.subplots(1, 2, gridspec_kw={'width_ratios': [2, 1]}) uses 1 row, 2 columns with width_ratios, which is correct syntax.Final Answer:
plt.subplots(1, 2, gridspec_kw={'width_ratios': [2, 1]}) -> Option AQuick Check:
Width ratios for columns = plt.subplots(1, 2, gridspec_kw={'width_ratios': [2, 1]}) [OK]
- Mixing width_ratios with rows instead of columns
- Using height_ratios for horizontal layout
- Wrong number of rows and columns in function
fig, axs = plt.subplots(1, 2, gridspec_kw={'width_ratios': [3, 1]})Solution
Step 1: Understand width_ratios parameter
The list [3, 1] means the first subplot width is 3 units, second is 1 unit.Step 2: Interpret ratio meaning
This means the first subplot is 3 times wider than the second subplot.Final Answer:
The first subplot is 3 times wider than the second -> Option DQuick Check:
Width ratio 3:1 means first is 3x wider [OK]
- Assuming equal widths despite ratios
- Reversing which subplot is wider
- Ignoring the ratio values
fig, axs = plt.subplots(2, 1, gridspec_kw={'width_ratios': [1, 2]})Solution
Step 1: Check subplot layout
2 rows and 1 column means vertical stacking of subplots.Step 2: Verify correct ratio parameter
For vertical layout, use 'height_ratios', not 'width_ratios'.Final Answer:
Using width_ratios for vertical subplots instead of height_ratios -> Option BQuick Check:
Vertical layout needs height_ratios [OK]
- Confusing width_ratios and height_ratios
- Ignoring subplot grid shape
- Assuming plt.show() affects subplot sizes
Solution
Step 1: Determine subplot layout
One row and three columns means horizontal layout.Step 2: Choose correct ratio parameter
For horizontal layout, use 'width_ratios' to set widths.Step 3: Set ratios to make middle subplot twice as wide
Use [1, 2, 1] so middle subplot is twice the width of others.Final Answer:
plt.subplots(1, 3, gridspec_kw={'width_ratios': [1, 2, 1]}) -> Option AQuick Check:
Horizontal layout with width_ratios = plt.subplots(1, 3, gridspec_kw={'width_ratios': [1, 2, 1]}) [OK]
- Using height_ratios for horizontal layout
- Setting wrong number of rows and columns
- Reversing ratio order
Ready to prove it?
Pass the test and this pattern moves unknown
