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
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).
Step 2: Identify the data representation
The height of each bar shows the value, while the base position shows categories or coordinates.
Final Answer:
Data with two position dimensions and one height dimension -> Option A
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
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').
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.
Final Answer:
ax = plt.figure().add_subplot(111, projection='3d') -> Option D
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
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].
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.
Final Answer:
Two red bars at positions (1,3) and (2,4) with height 1 -> Option A
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
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.
Step 2: Verify size parameters
dx, dy, dz can be scalars or lists matching length of bars, so scalars are allowed.
Final Answer:
Length of y does not match length of x and z -> Option B
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
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).
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.
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
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