Trend lines on scatter plots in Matplotlib - Time & Space Complexity
We want to understand how the time to draw a trend line on a scatter plot changes as we add more points.
How does the work grow when the number of points increases?
Analyze the time complexity of the following code snippet.
import matplotlib.pyplot as plt
import numpy as np
n = 100 # Example value for n
x = np.random.rand(n)
y = np.random.rand(n)
plt.scatter(x, y)
coeffs = np.polyfit(x, y, 1)
plt.plot(x, coeffs[0] * x + coeffs[1])
plt.show()
This code creates a scatter plot of n points and fits a straight line (trend line) through them.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Calculating the best-fit line using
np.polyfit, which processes all n points. - How many times: It examines all n points once to compute the line coefficients.
As the number of points n increases, the time to compute the trend line grows roughly in direct proportion.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 operations |
| 100 | About 100 operations |
| 1000 | About 1000 operations |
Pattern observation: Doubling the points roughly doubles the work needed to find the trend line.
Time Complexity: O(n)
This means the time to compute the trend line grows linearly with the number of points.
[X] Wrong: "Adding more points won't affect the time much because the line is just one line."
[OK] Correct: Even though the line is simple, the calculation must consider every point to find the best fit, so more points mean more work.
Understanding how data size affects plotting and calculations helps you explain performance clearly and shows you think about efficiency in real tasks.
What if we changed the trend line to a polynomial of degree 3? How would the time complexity change?
Practice
Solution
Step 1: Understand scatter plot purpose
A scatter plot shows individual data points but may not clearly show the overall trend.Step 2: Role of trend line
A trend line summarizes the general direction or pattern in the data, making relationships easier to see.Final Answer:
To show the overall pattern or relationship between variables -> Option AQuick Check:
Trend line = overall pattern [OK]
- Thinking trend lines change point colors
- Confusing trend lines with point size changes
- Believing trend lines remove data points
x and y using numpy?Solution
Step 1: Understand np.polyfit parameters
np.polyfit(x, y, degree) fits a polynomial of given degree to x and y data.Step 2: Correct usage for linear fit
For a linear trend line, degree = 1, and x is independent variable, y is dependent variable.Final Answer:
coefficients = np.polyfit(x, y, 1) -> Option AQuick Check:
np.polyfit(x, y, 1) fits linear trend [OK]
- Swapping x and y in np.polyfit
- Omitting degree parameter
- Using degree 2 for linear trend
print(trendline(3))?
import numpy as np x = np.array([1, 2, 3, 4]) y = np.array([2, 4, 6, 8]) coefficients = np.polyfit(x, y, 1) trendline = np.poly1d(coefficients) print(trendline(3))
Solution
Step 1: Analyze data and polyfit
Data y doubles x (2,4,6,8), so linear fit slope ~2 and intercept ~0.Step 2: Calculate trendline at x=3
trendline(3) = 2*3 + 0 = 6.0Final Answer:
6.0 -> Option DQuick Check:
trendline(3) = 6.0 [OK]
- Confusing x and y order in polyfit
- Forgetting poly1d creates function
- Assuming error instead of numeric output
import numpy as np import matplotlib.pyplot as plt x = np.array([1, 2, 3, 4]) y = np.array([2, 3, 5, 7]) coeff = np.polyfit(x, y, 1) trend = np.poly1d(coeff) plt.scatter(x, y) plt.plot(x, trend) plt.show()
Solution
Step 1: Check trend line plotting
plt.plot expects y-values, but trend is a function, not values.Step 2: Correct function call
Call trend(x) to get y-values for plotting: plt.plot(x, trend(x))Final Answer:
plt.plot(x, trend) should be plt.plot(x, trend(x)) -> Option BQuick Check:
Plot function needs y-values, not function [OK]
- Passing function instead of values to plt.plot
- Swapping x and y in polyfit
- Thinking plot order affects output
- Missing axis labels is not an error
Solution
Step 1: Understand effect of outliers
Outliers can distort the trend line fit, making it less representative.Step 2: Improve fit by removing outliers
Removing or filtering outliers before fitting helps get a better trend line.Final Answer:
Remove outliers before fitting trend line with np.polyfit -> Option CQuick Check:
Remove outliers for better trend line [OK]
- Fitting trend line on all data including outliers
- Skipping trend line when data is noisy
- Confusing plot types for trend line fitting
Ready to prove it?
Pass the test and this pattern moves unknown
