Stacked bar charts help us compare parts of different groups all at once. They show how each part adds up to a total.
Stacked bar charts in Matplotlib
import matplotlib.pyplot as plt # Data for groups and parts labels = ['Group1', 'Group2', 'Group3'] part1 = [value1, value2, value3] part2 = [value4, value5, value6] # Create bars for part1 plt.bar(labels, part1, label='Part 1') # Create bars for part2 stacked on part1 plt.bar(labels, part2, bottom=part1, label='Part 2') plt.legend() plt.show()
The bottom parameter stacks bars on top of previous bars.
Each plt.bar call adds one part of the stack.
import matplotlib.pyplot as plt labels = ['A', 'B', 'C'] part1 = [3, 5, 2] part2 = [1, 2, 4] plt.bar(labels, part1, label='Part 1') plt.bar(labels, part2, bottom=part1, label='Part 2') plt.legend() plt.show()
import matplotlib.pyplot as plt labels = ['X', 'Y', 'Z'] part1 = [0, 0, 0] part2 = [2, 3, 1] plt.bar(labels, part1, label='Part 1') plt.bar(labels, part2, bottom=part1, label='Part 2') plt.legend() plt.show()
import matplotlib.pyplot as plt labels = ['Only'] part1 = [4] part2 = [6] plt.bar(labels, part1, label='Part 1') plt.bar(labels, part2, bottom=part1, label='Part 2') plt.legend() plt.show()
import matplotlib.pyplot as plt labels = [] part1 = [] part2 = [] plt.bar(labels, part1, label='Part 1') plt.bar(labels, part2, bottom=part1, label='Part 2') plt.legend() plt.show()
This program shows how to create a stacked bar chart with two parts. It prints the data before plotting so you see what is used.
import matplotlib.pyplot as plt # Groups and their parts labels = ['Apples', 'Bananas', 'Cherries'] part1 = [5, 3, 4] # Quantity of red fruits part2 = [2, 4, 1] # Quantity of green fruits print('Before plotting:') print(f'Labels: {labels}') print(f'Part 1 values: {part1}') print(f'Part 2 values: {part2}') # Plot part1 bars plt.bar(labels, part1, label='Red Fruits', color='red') # Plot part2 bars stacked on part1 plt.bar(labels, part2, bottom=part1, label='Green Fruits', color='green') plt.title('Stacked Bar Chart of Fruit Quantities') plt.xlabel('Fruit Type') plt.ylabel('Quantity') plt.legend() plt.show()
Time complexity is O(n) where n is number of groups, because each bar is drawn once.
Space complexity is O(n) for storing data arrays.
Common mistake: forgetting to use bottom causes bars to overlap instead of stack.
Use stacked bars when you want to show parts of a whole and compare totals. Use grouped bars if you want to compare parts side by side without stacking.
Stacked bar charts show how parts add up to a total for each group.
Use the bottom parameter to stack bars on top of each other.
They help compare both totals and parts across groups in one chart.
Practice
stacked bar chart in data visualization?Solution
Step 1: Understand the concept of stacked bar charts
Stacked bar charts combine multiple data parts into one bar to show totals and parts.Step 2: Identify the purpose of stacking
Stacking helps visualize how each part contributes to the total for each group.Final Answer:
To show how different parts contribute to the total within each group -> Option DQuick Check:
Stacked bars = parts + total [OK]
- Confusing stacked bars with line charts
- Thinking stacked bars show individual points only
- Mixing stacked bars with pie charts
matplotlib parameter is used to stack bars on top of each other in a bar chart?Solution
Step 1: Recall bar chart parameters
Inmatplotlib,heightsets bar size,widthsets bar thickness,aligncontrols bar alignment.Step 2: Identify stacking parameter
Thebottomparameter sets where the bar starts vertically, allowing stacking on previous bars.Final Answer:
bottom -> Option BQuick Check:
Stack bars use bottom parameter [OK]
- Using height to stack bars (it sets bar size)
- Confusing width with stacking
- Using align which only shifts bars horizontally
import matplotlib.pyplot as plt labels = ['A', 'B'] values1 = [3, 5] values2 = [2, 4] plt.bar(labels, values1) plt.bar(labels, values2, bottom=values1) plt.show()
Solution
Step 1: Analyze the first bar call
The firstplt.bardraws bars of height 3 and 5 for labels 'A' and 'B'.Step 2: Analyze the second bar call with bottom
The secondplt.bardraws bars of height 2 and 4 stacked on top of the first bars usingbottom=values1.Final Answer:
Two bars per label, stacked vertically -> Option AQuick Check:
bottom stacks bars vertically [OK]
- Thinking bars appear side by side without bottom
- Assuming only one bar per label is drawn
- Believing bottom parameter causes error
import matplotlib.pyplot as plt labels = ['X', 'Y'] values1 = [4, 6] values2 = [3, 5] plt.bar(labels, values1) plt.bar(labels, values2, bottom=values2) plt.show()
Solution
Step 1: Check the bottom parameter usage
The second bar usesbottom=values2, which stacks bars on themselves, not on the first bars.Step 2: Correct stacking requires bottom=values1
To stack bars correctly, the second bars should start at the height of the first bars, sobottom=values1is needed.Final Answer:
Using bottom=values2 instead of bottom=values1 causes incorrect stacking -> Option CQuick Check:
bottom must be previous bar heights [OK]
- Setting bottom to current bar heights instead of previous
- Thinking plt.bar can only be called once
- Ignoring length matching of values
store_labels = ['Store1', 'Store2'] sales_A = [10, 15] sales_B = [5, 7] sales_C = [3, 4]
How do you create a stacked bar chart showing all three sales categories stacked for each store?
Solution
Step 1: Plot the first category normally
Plotsales_Abars starting at zero (default).Step 2: Stack second category on first
Plotsales_Bbars withbottom=sales_Ato stack on top ofsales_A.Step 3: Stack third category on sum of first two
Plotsales_Cbars withbottom=[a+b for a,b in zip(sales_A, sales_B)]to stack on top of both.Final Answer:
Plot sales_A, then sales_B with bottom=sales_A, then sales_C with bottom=sales_A + sales_B -> Option AQuick Check:
Stack each bar on sum of all below [OK]
- Stacking third category only on second, ignoring first
- Plotting all bars at bottom=0 causing overlap
- Using wrong bottom values causing incorrect stacking
Ready to prove it?
Pass the test and this pattern moves unknown
