Bird
Raised Fist0
Matplotlibdata~20 mins

3D surface plots in Matplotlib - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
3D Surface Plot Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of a simple 3D surface plot code
What will be the shape of the Z array used in this 3D surface plot code?
Matplotlib
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

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)
plt.show()
A(50, 50)
B(50,)
C(100, 100)
D(25, 25)
Attempts:
2 left
💡 Hint
Remember how meshgrid works with two 1D arrays of length 50.
data_output
intermediate
2:00remaining
Number of faces in a 3D surface plot
Given the following code, how many quadrilateral faces will the 3D surface plot have?
Matplotlib
import numpy as np
x = np.linspace(0, 1, 20)
y = np.linspace(0, 1, 30)
X, Y = np.meshgrid(x, y)
Z = X * Y
A552
B551
C570
D550
Attempts:
2 left
💡 Hint
Number of faces = (rows - 1) * (columns - 1)
visualization
advanced
2:30remaining
Effect of stride parameters on 3D surface plot
Which option shows the correct effect of setting rstride=5 and cstride=5 in ax.plot_surface(X, Y, Z, rstride=5, cstride=5)?
Matplotlib
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x = np.linspace(-3, 3, 60)
y = np.linspace(-3, 3, 60)
X, Y = np.meshgrid(x, y)
Z = np.exp(-0.1*(X**2 + Y**2))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, rstride=5, cstride=5)
plt.show()
AThe surface mesh is colored randomly due to stride parameters.
BThe surface mesh is finer with more grid lines, showing a smooth appearance.
CThe surface mesh is invisible because stride values are too large.
DThe surface mesh is coarser with fewer grid lines, showing a blocky appearance.
Attempts:
2 left
💡 Hint
Stride controls the step size for sampling the grid points.
🔧 Debug
advanced
2:00remaining
Identify the error in 3D surface plot code
What error will this code raise when executed?
Matplotlib
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x = np.linspace(-2, 2, 40)
y = np.linspace(-2, 2, 40)
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, cmap='nonexistent_cmap')
plt.show()
AValueError: 'nonexistent_cmap' is not a valid colormap name
BTypeError: plot_surface() got an unexpected keyword argument 'cmap'
CAttributeError: 'Axes3D' object has no attribute 'plot_surface'
DNo error, plot displays normally
Attempts:
2 left
💡 Hint
Check if the colormap name is valid in matplotlib.
🚀 Application
expert
3:00remaining
Interpreting 3D surface plot data output
Given the code below, what is the maximum Z value computed?
Matplotlib
import numpy as np
x = np.linspace(-1, 1, 100)
y = np.linspace(-1, 1, 100)
X, Y = np.meshgrid(x, y)
Z = np.exp(-(X**2 + Y**2)) * np.cos(5 * (X**2 + Y**2))
A1.0
B0.0
CApproximately 0.98
D-1.0
Attempts:
2 left
💡 Hint
Consider the function behavior at the origin (0,0).

Practice

(1/5)
1. What does a 3D surface plot in matplotlib primarily show?
easy
A. The relationship between two input variables and one output variable as a curved surface
B. A simple 2D line graph of data points
C. Only the distribution of a single variable
D. A bar chart comparing categories

Solution

  1. 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.
  2. 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.
  3. Final Answer:

    The relationship between two input variables and one output variable as a curved surface -> Option A
  4. Quick 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
A. import matplotlib.pyplot as plt3d
B. from matplotlib import surface3d
C. from mpl_toolkits.mplot3d import Axes3D
D. import mpl3d as m3d

Solution

  1. 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.
  2. Step 2: Check other options for correctness

    Options A, C, and D are not valid matplotlib import statements for 3D plotting.
  3. Final Answer:

    from mpl_toolkits.mplot3d import Axes3D -> Option C
  4. Quick 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
A. A 3D surface plot showing a bowl-shaped paraboloid
B. A flat 2D plot with points scattered
C. A syntax error due to missing import
D. A 3D scatter plot of random points

Solution

  1. Step 1: Analyze the function Z = X^2 + Y^2

    This function creates a paraboloid shape, which looks like a bowl opening upwards.
  2. 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.
  3. Final Answer:

    A 3D surface plot showing a bowl-shaped paraboloid -> Option A
  4. Quick 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
A. Z calculation is incorrect
B. Missing projection='3d' in add_subplot
C. meshgrid is not needed for surface plots
D. plt.show() is missing

Solution

  1. 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.
  2. Step 2: Verify other parts

    Z calculation and meshgrid usage are correct. plt.show() is present.
  3. Final Answer:

    Missing projection='3d' in add_subplot -> Option B
  4. Quick 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
A. 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()
B. 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()
C. 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()
D. 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, projection='3d') surf = ax.plot_surface(X, Y, Z, cmap='viridis') fig.colorbar(surf) plt.show()

Solution

  1. 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.
  2. 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.
  3. 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.
  4. Final Answer:

    The code with projection='3d', cmap='viridis', colorbar, correct Z, and 100 points -> Option D
  5. Quick 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