3D surface plots help us see how two inputs relate to an output in a smooth, curved shape. They make it easy to understand complex data with three dimensions.
3D surface plots in Matplotlib
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Matplotlib
from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(111, projection='3d') X, Y = np.meshgrid(x_values, y_values) Z = some_function(X, Y) ax.plot_surface(X, Y, Z, cmap='viridis') plt.show()
Use projection='3d' to create a 3D plot.
np.meshgrid creates coordinate grids for X and Y.
Examples
Matplotlib
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x = np.linspace(-5, 5, 50) y = np.linspace(-5, 5, 50) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z, cmap='coolwarm') plt.show()
Matplotlib
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x = np.linspace(-3, 3, 30) y = np.linspace(-3, 3, 30) X, Y = np.meshgrid(x, y) Z = X**2 - Y**2 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z, cmap='plasma') plt.show()
Sample Program
This program creates a smooth 3D surface shaped by a combination of exponential decay and sine/cosine waves. The color map helps show height differences.
Matplotlib
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # Create data points x = np.linspace(-4, 4, 40) y = np.linspace(-4, 4, 40) X, Y = np.meshgrid(x, y) # Define Z as a function of X and Y Z = np.exp(-0.1 * (X**2 + Y**2)) * np.cos(X) * np.sin(Y) # Create the figure and 3D axis fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # Plot the surface with color map surf = ax.plot_surface(X, Y, Z, cmap='viridis') # Add a color bar to show the scale fig.colorbar(surf, shrink=0.5, aspect=5) plt.show()
Important Notes
3D plots can be rotated interactively in the plot window to see different angles.
Choosing a good color map helps make the surface easier to understand.
Meshgrid size affects plot detail and performance; bigger grids show smoother surfaces but take longer.
Summary
3D surface plots show how two inputs affect one output in a smooth shape.
Use projection='3d' and plot_surface in matplotlib to create them.
Meshgrid creates the grid of points needed for the surface.
Practice
1. What does a 3D surface plot in matplotlib primarily show?
easy
Solution
Step 1: Understand the purpose of 3D surface plots
3D surface plots visualize how two inputs relate to an output by showing a curved surface in three dimensions.Step 2: Compare with other plot types
Unlike 2D line graphs or bar charts, 3D surface plots show a continuous surface representing output values over a grid of inputs.Final Answer:
The relationship between two input variables and one output variable as a curved surface -> Option AQuick Check:
3D surface plot = curved surface of inputs and output [OK]
Hint: 3D surface plots show two inputs and one output as a surface [OK]
Common Mistakes:
- Confusing 3D surface plots with 2D line plots
- Thinking it shows only one variable distribution
- Mixing up bar charts with surface plots
2. Which of the following is the correct way to import the 3D plotting toolkit in matplotlib?
easy
Solution
Step 1: Recall the standard import for 3D plotting
Matplotlib uses mpl_toolkits.mplot3d to enable 3D plotting, and the correct import is from mpl_toolkits.mplot3d import Axes3D.Step 2: Check other options for correctness
Options A, C, and D are not valid matplotlib import statements for 3D plotting.Final Answer:
from mpl_toolkits.mplot3d import Axes3D -> Option CQuick Check:
3D import = mpl_toolkits.mplot3d Axes3D [OK]
Hint: Use mpl_toolkits.mplot3d import Axes3D for 3D plots [OK]
Common Mistakes:
- Trying to import non-existent modules
- Using wrong aliases like plt3d
- Assuming 3D is included by default in pyplot
3. What will the following code output?
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x = np.linspace(-5, 5, 10) y = np.linspace(-5, 5, 10) X, Y = np.meshgrid(x, y) Z = X**2 + Y**2 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z) plt.show()
medium
Solution
Step 1: Analyze the function Z = X^2 + Y^2
This function creates a paraboloid shape, which looks like a bowl opening upwards.Step 2: Understand the plot_surface call
plot_surface plots the Z values over the grid defined by X and Y, producing a smooth 3D surface.Final Answer:
A 3D surface plot showing a bowl-shaped paraboloid -> Option AQuick Check:
plot_surface with X^2+Y^2 = bowl shape [OK]
Hint: Z = X² + Y² forms a bowl shape in 3D surface plots [OK]
Common Mistakes:
- Confusing surface plot with scatter plot
- Expecting 2D plot instead of 3D
- Missing meshgrid usage for X, Y
4. Identify the error in this code snippet for creating a 3D surface plot:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-3, 3, 50) y = np.linspace(-3, 3, 50) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) fig = plt.figure() ax = fig.add_subplot(111) ax.plot_surface(X, Y, Z) plt.show()
medium
Solution
Step 1: Check subplot creation for 3D plotting
To plot 3D surfaces, the subplot must have projection='3d'. The code misses this, so ax is 2D.Step 2: Verify other parts
Z calculation and meshgrid usage are correct. plt.show() is present.Final Answer:
Missing projection='3d' in add_subplot -> Option BQuick Check:
3D plot needs projection='3d' [OK]
Hint: Always add projection='3d' for 3D subplots [OK]
Common Mistakes:
- Forgetting projection='3d' in add_subplot
- Misusing meshgrid or Z calculation
- Omitting plt.show()
5. You want to visualize the function
Z = sin(X) * cos(Y) over the range -π to π for both X and Y with a smooth surface and a color map that highlights height differences. Which of the following code snippets correctly achieves this?hard
Solution
Step 1: Check function and range correctness
The correct code uses Z = np.sin(X) * np.cos(Y) over -np.pi to np.pi with 100 points for smoothness.Step 2: Verify 3D plotting and color map usage
The correct code uses projection='3d', plot_surface with cmap='viridis', and adds a colorbar to highlight height differences.Step 3: Identify errors in other options
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-np.pi, np.pi, 100) y = np.linspace(-np.pi, np.pi, 100) X, Y = np.meshgrid(x, y) Z = np.sin(X) * np.cos(Y) plt.plot_surface(X, Y, Z, cmap='plasma') plt.show() misses 3D axis creation; import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x = np.linspace(-np.pi, np.pi, 50) y = np.linspace(-np.pi, np.pi, 50) X, Y = np.meshgrid(x, y) Z = np.sin(X) + np.cos(Y) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z) plt.show() uses wrong function Z and fewer points; import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x = np.linspace(-np.pi, np.pi, 100) y = np.linspace(-np.pi, np.pi, 100) X, Y = np.meshgrid(x, y) Z = np.sin(X) * np.cos(Y) fig = plt.figure() ax = fig.add_subplot(111) ax.plot_surface(X, Y, Z, cmap='coolwarm') plt.show() misses projection='3d' in subplot.Final Answer:
The code with projection='3d', cmap='viridis', colorbar, correct Z, and 100 points -> Option DQuick Check:
projection='3d' + cmap='viridis' + colorbar + Z=sin(X)*cos(Y) + 100 pts [OK]
Hint: Use projection='3d', meshgrid, and cmap for smooth colored surfaces [OK]
Common Mistakes:
- Forgetting projection='3d' in subplot
- Using wrong function for Z
- Not adding color map or colorbar
- Calling plot_surface without axis object
