Figure and axes creation in Data Analysis Python - Time & Space Complexity
When we create figures and axes in data analysis, we want to know how the time it takes changes as we add more elements.
We ask: How does the work grow when we create more axes or figures?
Analyze the time complexity of the following code snippet.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(nrows=3, ncols=2)
for i in range(3):
for j in range(2):
ax[i, j].plot([1, 2, 3], [1, 4, 9])
This code creates a figure with 6 axes arranged in 3 rows and 2 columns, then plots a simple line on each axis.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Nested loops over rows and columns to plot on each axis.
- How many times: The inner plot command runs once for each axis, total 3 x 2 = 6 times.
As the number of rows and columns increases, the total axes grow by multiplying these two numbers.
| Input Size (rows x cols) | Approx. Operations |
|---|---|
| 3 x 2 = 6 | 6 plots |
| 10 x 10 = 100 | 100 plots |
| 30 x 30 = 900 | 900 plots |
Pattern observation: The work grows proportionally to the total number of axes created.
Time Complexity: O(n*m)
This means the time to create and plot on axes grows linearly with the number of axes (rows times columns).
[X] Wrong: "Creating more axes takes the same time no matter how many there are."
[OK] Correct: Each axis requires separate setup and plotting, so more axes mean more work and more time.
Understanding how plotting scales helps you manage performance when working with many charts or subplots in real projects.
"What if we added a loop inside each axis to plot multiple lines? How would the time complexity change?"
Practice
plt.subplots() function return in matplotlib?Solution
Step 1: Understand plt.subplots() purpose
The function is designed to create a figure and axes together for plotting.Step 2: Check the return values
It returns a tuple: the first is the figure, the second is the axes (single or array).Final Answer:
A figure and one or more axes objects -> Option AQuick Check:
plt.subplots() = (figure, axes) [OK]
- Thinking it returns only figure or only axes
- Confusing axes with data points
- Assuming it returns a plot directly
Solution
Step 1: Recall plt.subplots() parameters
The first argument is number of rows, the second is number of columns.Step 2: Match the correct order
To create 2 rows and 3 columns, use plt.subplots(2, 3).Final Answer:
fig, axes = plt.subplots(2, 3) -> Option BQuick Check:
Rows first, columns second in plt.subplots() [OK]
- Swapping rows and columns order
- Using keyword arguments incorrectly
- Passing a single number instead of two
axes when running fig, axes = plt.subplots(2, 2)?Solution
Step 1: Understand axes structure for multiple subplots
When more than one subplot is created, axes is a 2D array matching the grid shape.Step 2: Check the shape for 2 rows and 2 columns
Axes will be a 2x2 numpy array of AxesSubplot objects.Final Answer:
A 2x2 numpy array of AxesSubplot objects -> Option AQuick Check:
Multiple subplots = axes array matching grid [OK]
- Expecting a flat list instead of 2D array
- Thinking axes is a single object always
- Confusing axes with figure
fig, ax = plt.subplots(2, 2) ax.plot([1, 2, 3], [4, 5, 6])
Solution
Step 1: Check the shape of ax from plt.subplots(2, 2)
ax is a 2x2 array of axes, not a single axes object.Step 2: Understand why ax.plot() fails
Calling plot() on an array causes an AttributeError because arrays don't have plot method.Final Answer:
ax is an array, so ax.plot() causes an error -> Option CQuick Check:
Array of axes needs indexing before plot() [OK]
- Trying to plot on axes array directly
- Assuming plt.subplots(2,2) returns single axes
- Ignoring need to index axes for plotting
Solution
Step 1: Determine subplot layout for vertical stacking
3 subplots stacked vertically means 3 rows and 1 column.Step 2: Set figure size correctly
Use figsize=(width, height) with width=8 and height=12 inches.Final Answer:
fig, axes = plt.subplots(3, 1, figsize=(8, 12)) -> Option DQuick Check:
Rows=3, cols=1, figsize=(8,12) [OK]
- Swapping rows and columns
- Using wrong keyword 'size' instead of 'figsize'
- Confusing width and height order
Ready to prove it?
Pass the test and this pattern moves unknown
