Bird
Raised Fist0
Matplotlibdata~30 mins

3D bar charts in Matplotlib - Mini Project: Build & Apply

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
3D Bar Charts
📖 Scenario: You work in a small store that sells three types of fruits: apples, bananas, and oranges. You want to show how many fruits were sold in three different months using a 3D bar chart. This will help your team quickly see which fruit sold the most each month.
🎯 Goal: Create a 3D bar chart using matplotlib to display the sales of apples, bananas, and oranges over three months.
📋 What You'll Learn
Create lists for fruit names and months
Create a list of sales numbers for each fruit in each month
Use matplotlib to create a 3D bar chart
Label the axes with fruit names, months, and sales numbers
Display the 3D bar chart
💡 Why This Matters
🌍 Real World
3D bar charts help visualize data with two categories and one numeric value, such as sales over time for different products.
💼 Career
Data analysts and scientists use 3D bar charts to present complex data clearly to stakeholders and decision makers.
Progress0 / 4 steps
1
Create the sales data lists
Create a list called fruits with these exact values: 'Apples', 'Bananas', 'Oranges'. Create a list called months with these exact values: 'January', 'February', 'March'. Create a list called sales with these exact values: [20, 35, 30] for January, [25, 32, 34] for February, and [22, 30, 35] for March. Store these three lists in a variable called sales as a list of lists, where each inner list corresponds to a month.
Matplotlib
Hint

Use three separate lists. The sales list should be a list of lists, each inner list for one month.

2
Set up the 3D plot
Import matplotlib.pyplot as plt and import Axes3D from mpl_toolkits.mplot3d. Create a figure called fig using plt.figure(). Add a 3D subplot to fig and store it in a variable called ax.
Matplotlib
Hint

Use fig.add_subplot(111, projection='3d') to create the 3D axes.

3
Plot the 3D bars
Use range(len(months)) and range(len(fruits)) to loop over months and fruits. For each month and fruit, use ax.bar3d() to draw a bar. Use the month index for the x position, the fruit index for the y position, and 0 for the z position. Use 0.5 for the width and depth of each bar. Use the sales number for the height. Store the x positions in xpos, y positions in ypos, z positions in zpos, widths in dx, depths in dy, and heights in dz. Use nested for loops with variables i for months and j for fruits.
Matplotlib
Hint

Use ax.bar3d() inside nested loops. The height dz is the sales number for month i and fruit j.

4
Label axes and show the plot
Set the x-axis ticks to the month indices and labels to the months list using ax.set_xticks() and ax.set_xticklabels(). Set the y-axis ticks to the fruit indices and labels to the fruits list using ax.set_yticks() and ax.set_yticklabels(). Set the z-axis label to 'Sales' using ax.set_zlabel(). Finally, call plt.show() to display the 3D bar chart.
Matplotlib
Hint

Use ax.set_xticks(), ax.set_xticklabels(), ax.set_yticks(), ax.set_yticklabels(), and ax.set_zlabel(). Then call plt.show().

Practice

(1/5)
1. What does a 3D bar chart in matplotlib primarily represent?
easy
A. Data with two position dimensions and one height dimension
B. Only two-dimensional data with color coding
C. A line graph with three lines
D. A pie chart with depth effect

Solution

  1. Step 1: Understand the axes in 3D bar charts

    3D bar charts use two axes for position (x and y) and one axis for height (z).
  2. Step 2: Identify the data representation

    The height of each bar shows the value, while the base position shows categories or coordinates.
  3. Final Answer:

    Data with two position dimensions and one height dimension -> Option A
  4. Quick Check:

    3D bar chart = 2D position + height [OK]
Hint: Remember: 3D bars have x, y positions and z height [OK]
Common Mistakes:
  • Confusing 3D bars with 2D bar charts
  • Thinking 3D bars only show color differences
  • Assuming 3D bars are line graphs
2. Which of the following is the correct way to create 3D axes in matplotlib before plotting a 3D bar chart?
easy
A. ax = plt.axes3d()
B. ax = plt.subplots(projection='3d')
C. ax = plt.subplot(projection='3d')
D. ax = plt.figure().add_subplot(111, projection='3d')

Solution

  1. Step 1: Recall how to create 3D axes in matplotlib

    The common method is to create a figure and add a 3D subplot using add_subplot(111, projection='3d').
  2. Step 2: Check each option

    ax = plt.subplot(projection='3d') uses subplot instead of add_subplot, which is incorrect. ax = plt.subplots(projection='3d') returns a tuple (figure, axes), so assigning directly to ax is incorrect. ax = plt.axes3d() is not a valid matplotlib function.
  3. Final Answer:

    ax = plt.figure().add_subplot(111, projection='3d') -> Option D
  4. Quick Check:

    Use figure().add_subplot with projection='3d' [OK]
Hint: Use figure().add_subplot(111, projection='3d') to get 3D axes [OK]
Common Mistakes:
  • Using plt.subplot instead of plt.figure().add_subplot
  • Trying to call non-existent plt.axes3d()
  • Confusing subplots() with subplot()
3. What will be the output of the following code snippet?
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = [1, 2]
y = [3, 4]
z = [0, 0]
dx = dy = dz = [1, 1]
ax.bar3d(x, y, z, dx, dy, dz, color='red')
plt.show()
medium
A. Two red bars at positions (1,3) and (2,4) with height 1
B. Two red bars at positions (0,0) and (1,1) with height 1
C. Error because dx, dy, dz should be scalars, not lists
D. Empty plot with no bars

Solution

  1. Step 1: Understand the parameters of ax.bar3d

    Parameters x, y, z are the positions of bars. dx, dy, dz are the sizes along each axis. Here, x=[1,2], y=[3,4], z=[0,0], and dx=dy=dz=[1,1].
  2. Step 2: Analyze the plot output

    Two bars will appear at (1,3,0) and (2,4,0) with width=1, depth=1, height=1, colored red.
  3. Final Answer:

    Two red bars at positions (1,3) and (2,4) with height 1 -> Option A
  4. Quick Check:

    Positions and sizes match bars at (1,3) and (2,4) [OK]
Hint: Check x,y,z positions and dx,dy,dz sizes carefully [OK]
Common Mistakes:
  • Assuming dx, dy, dz must be scalars only
  • Confusing bar positions with sizes
  • Expecting bars at (0,0) instead of given x,y
4. Identify the error in this code for plotting a 3D bar chart:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = [1, 2, 3]
y = [4, 5]
z = [0, 0, 0]
dx = dy = dz = 1
ax.bar3d(x, y, z, dx, dy, dz)
plt.show()
medium
A. Missing import for Axes3D
B. Length of y does not match length of x and z
C. dx, dy, dz must be lists, not scalars
D. ax.bar3d does not accept scalar sizes

Solution

  1. Step 1: Check lengths of position arrays

    x has length 3, y has length 2, z has length 3. They must all be the same length for bar3d.
  2. Step 2: Verify size parameters

    dx, dy, dz can be scalars or lists matching length of bars, so scalars are allowed.
  3. Final Answer:

    Length of y does not match length of x and z -> Option B
  4. Quick Check:

    All position arrays must have equal length [OK]
Hint: Check all position lists have same length [OK]
Common Mistakes:
  • Assuming dx, dy, dz must be lists
  • Ignoring mismatch in array lengths
  • Forgetting to import mpl_toolkits.mplot3d (not needed here)
5. You want to plot a 3D bar chart showing sales data for 3 products over 4 months. Which approach correctly sets up the data for ax.bar3d()?
hard
A. Use x, y, z all as sales values, dz as zeros
B. Use x as months, y as products, z as sales values, and dz as ones
C. Use x as product indices repeated for each month, y as month indices tiled for each product, z as zeros, and dz as sales values
D. Use x and y as sales values, z as product indices, dz as month indices

Solution

  1. Step 1: Understand the data layout for 3D bars

    x and y represent positions (product and month), z is the base height (usually zero), dz is the height of bars (sales values).
  2. Step 2: Arrange data correctly

    Repeat product indices for each month (x), tile month indices for each product (y), set z to zero, and use sales data as dz.
  3. Final Answer:

    Use x as product indices repeated for each month, y as month indices tiled for each product, z as zeros, and dz as sales values -> Option C
  4. Quick Check:

    Positions = product/month, height = sales [OK]
Hint: Map x,y to categories, dz to values for bar height [OK]
Common Mistakes:
  • Mixing sales values as positions instead of heights
  • Using z as sales height instead of dz
  • Not repeating/tiling indices properly for grid