Bird
Raised Fist0
Matplotlibdata~10 mins

Horizontal grouped bars in Matplotlib - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Horizontal grouped bars
Prepare data for groups and categories
↓
Calculate bar positions for each group
↓
Plot horizontal bars for each category side-by-side
↓
Add labels, legend, and display plot
↓
END
The flow shows preparing data, calculating positions for grouped bars, plotting horizontal bars side-by-side, then labeling and displaying the chart.
Execution Sample
Matplotlib
import matplotlib.pyplot as plt

labels = ['G1', 'G2', 'G3']
cat1 = [5, 7, 3]
cat2 = [6, 2, 4]

bar_width = 0.35
indices = range(len(labels))

plt.barh([i for i in indices], cat1, height=bar_width, label='Cat1')
plt.barh([i + bar_width for i in indices], cat2, height=bar_width, label='Cat2')

plt.yticks([i + bar_width/2 for i in indices], labels)
plt.legend()
plt.show()
This code plots two categories of horizontal bars grouped by labels G1, G2, G3 side-by-side.
Execution Table
StepActionVariable/ValueEffect/Output
1Define labelslabels = ['G1', 'G2', 'G3']Groups to plot
2Define category valuescat1 = [5,7,3], cat2 = [6,2,4]Data for bars
3Set bar widthbar_width = 0.35Thickness of each bar
4Calculate indicesindices = [0,1,2]Positions for groups
5Plot cat1 barsplt.barh(indices, cat1, height=0.35)Bars at positions 0,1,2 with cat1 values
6Plot cat2 barsplt.barh([i+0.35 for i in indices], cat2, height=0.35)Bars shifted up by 0.35 for cat2
7Set y-ticksplt.yticks([i+0.175 for i in indices], labels)Labels centered between grouped bars
8Add legendplt.legend()Shows category labels
9Show plotplt.show()Displays horizontal grouped bar chart
10End-Plot complete
💡 All bars plotted and displayed, execution ends.
Variable Tracker
VariableStartAfter Step 2After Step 4After Step 6Final
labelsundefined['G1', 'G2', 'G3']['G1', 'G2', 'G3']['G1', 'G2', 'G3']['G1', 'G2', 'G3']
cat1undefined[5,7,3][5,7,3][5,7,3][5,7,3]
cat2undefined[6,2,4][6,2,4][6,2,4][6,2,4]
bar_widthundefinedundefined0.350.350.35
indicesundefinedundefined[0,1,2][0,1,2][0,1,2]
cat2_positionsundefinedundefinedundefined[0.35,1.35,2.35][0.35,1.35,2.35]
Key Moments - 3 Insights
Why do we add bar_width to indices for the second category bars?
Adding bar_width shifts the second category bars up so they don't overlap the first category bars, creating side-by-side grouping as shown in execution_table step 6.
How do y-ticks align with grouped bars?
Y-ticks are set at indices plus half the bar_width (step 7) to center labels between the two bars in each group.
What happens if bar_width is too large?
Bars may overlap or labels may misalign. The bar_width controls thickness and spacing, so it must be chosen carefully as in step 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 6, what are the y positions for the second category bars?
A[0.35, 1.35, 2.35]
B[0.175, 1.175, 2.175]
C[0, 1, 2]
D[1, 2, 3]
💡 Hint
Check the 'Variable/Value' column at step 6 in execution_table for cat2 bar positions.
According to variable_tracker, what is the value of 'indices' after step 4?
A[1, 2, 3]
B[0, 1, 2]
C[0.35, 1.35, 2.35]
Dundefined
💡 Hint
Look at the 'indices' row under 'After Step 4' in variable_tracker.
If bar_width was changed to 0.5, how would the y-ticks positions change?
AThey would be at indices + 0.5
BThey would stay at indices
CThey would be at indices + 0.25
DThey would be at indices + 1
💡 Hint
Y-ticks are set at indices plus half the bar_width as shown in execution_table step 7.
Concept Snapshot
Horizontal grouped bars:
- Use plt.barh() for horizontal bars
- Calculate positions for each group and category
- Shift bars by bar_width to group side-by-side
- Set y-ticks centered between bars
- Add legend and show plot
- Controls thickness and spacing with bar_width
Full Transcript
This visual execution traces how to create horizontal grouped bar charts using matplotlib. We start by defining group labels and two categories of data. We set a bar width to control thickness. We calculate indices for group positions. We plot the first category bars at these indices. Then we plot the second category bars shifted up by the bar width to avoid overlap. Y-ticks are set centered between the grouped bars for clear labeling. Finally, we add a legend and display the plot. Variables like labels, cat1, cat2, bar_width, and indices change step-by-step as shown. Key points include shifting bars to group them side-by-side and centering labels. The quiz tests understanding of bar positions and label alignment.

Practice

(1/5)
1.

What is the main purpose of using horizontal grouped bars in a chart?

easy
A. To compare multiple categories side by side horizontally
B. To show data as a pie chart
C. To display data only vertically
D. To create a line graph

Solution

  1. Step 1: Understand the chart type

    Horizontal grouped bars place bars side by side horizontally to compare groups.
  2. Step 2: Identify the purpose

    This layout helps compare multiple categories clearly across groups.
  3. Final Answer:

    To compare multiple categories side by side horizontally -> Option A
  4. Quick Check:

    Horizontal grouped bars = compare categories horizontally [OK]
Hint: Grouped bars show side-by-side comparisons horizontally [OK]
Common Mistakes:
  • Confusing horizontal bars with pie charts
  • Thinking grouped bars are vertical only
  • Mixing line graphs with bar charts
2.

Which of the following is the correct way to create horizontal grouped bars in matplotlib?

import matplotlib.pyplot as plt
import numpy as np

labels = ['A', 'B', 'C']
values1 = [5, 7, 3]
values2 = [6, 2, 4]

x = np.arange(len(labels))
width = 0.35

plt.barh(x, values1, height=width)
plt.barh(x + width, values2, height=width)
plt.show()
easy
A. Use plt.scatter for grouped bars
B. Use plt.bar with shifted positions for each group
C. Use plt.plot with x and y values
D. Use plt.barh with shifted positions for each group

Solution

  1. Step 1: Check the function used

    The code uses plt.barh which creates horizontal bars.
  2. Step 2: Verify grouping method

    Positions are shifted by adding width to x to group bars side by side horizontally.
  3. Final Answer:

    Use plt.barh with shifted positions for each group -> Option D
  4. Quick Check:

    plt.barh + shifted positions = grouped horizontal bars [OK]
Hint: Use plt.barh and shift positions to group bars horizontally [OK]
Common Mistakes:
  • Using plt.bar instead of plt.barh for horizontal bars
  • Not shifting positions causing overlapping bars
  • Using plt.plot or plt.scatter which are not bar charts
3.

What will be the output of the following code?

import matplotlib.pyplot as plt
import numpy as np

labels = ['X', 'Y']
values1 = [3, 8]
values2 = [5, 2]

x = np.arange(len(labels))
width = 0.4

plt.barh(x, values1, height=width, color='blue')
plt.barh(x + width, values2, height=width, color='red')
plt.yticks(x + width / 2, labels)
plt.show()
medium
A. A line plot with two lines
B. Two vertical bar groups overlapping
C. Two sets of horizontal bars side by side for each label
D. A scatter plot with points at x positions

Solution

  1. Step 1: Analyze barh usage

    plt.barh creates horizontal bars at positions x and x + width, shifted to group bars.
  2. Step 2: Check y-axis labels

    yticks are set at middle positions between bars for labels 'X' and 'Y'.
  3. Final Answer:

    Two sets of horizontal bars side by side for each label -> Option C
  4. Quick Check:

    barh + shifted positions + ytick labels = grouped horizontal bars [OK]
Hint: Shift y positions and set yticks for grouped horizontal bars [OK]
Common Mistakes:
  • Confusing horizontal bars with vertical bars
  • Not setting yticks causing label misalignment
  • Expecting line or scatter plot output
4.

Identify the error in this code for horizontal grouped bars:

import matplotlib.pyplot as plt
import numpy as np

labels = ['P', 'Q', 'R']
values1 = [4, 6, 5]
values2 = [7, 3, 8]

x = np.arange(len(labels))
width = 0.3

plt.barh(x, values1, height=width)
plt.barh(x, values2, height=width)
plt.yticks(x + width / 2, labels)
plt.show()
medium
A. Bars overlap because positions are not shifted for grouping
B. Height parameter is missing
C. yticks are set incorrectly
D. Values lists have different lengths

Solution

  1. Step 1: Check bar positions

    Both plt.barh calls use the same x positions, so bars overlap instead of grouping.
  2. Step 2: Verify grouping method

    Positions should be shifted by width to separate groups horizontally.
  3. Final Answer:

    Bars overlap because positions are not shifted for grouping -> Option A
  4. Quick Check:

    Same x positions without shift = overlapping bars [OK]
Hint: Shift bar positions to avoid overlap in grouped bars [OK]
Common Mistakes:
  • Not shifting positions for second group
  • Incorrect yticks placement
  • Assuming height parameter fixes overlap
5.

You have sales data for 3 products over 2 years:

products = ['A', 'B', 'C']
year1 = [10, 15, 7]
year2 = [12, 9, 14]

How would you create a horizontal grouped bar chart to compare sales by product and year, ensuring product labels appear centered between grouped bars?

hard
A. Use plt.plot to draw lines for each product
B. Use plt.barh with positions shifted by width and set yticks at x + width/2
C. Use plt.barh with same positions for both years and set yticks at x
D. Use plt.bar with positions shifted by width and set xticks at x + width/2

Solution

  1. Step 1: Use plt.barh with shifted positions

    Shift positions by width for each year to group bars horizontally side by side.
  2. Step 2: Set yticks at middle of grouped bars

    Set yticks at x + width/2 so product labels appear centered between bars.
  3. Final Answer:

    Use plt.barh with positions shifted by width and set yticks at x + width/2 -> Option B
  4. Quick Check:

    Shift positions + yticks center = clear grouped horizontal bars [OK]
Hint: Shift bars and center yticks for clear grouped horizontal bars [OK]
Common Mistakes:
  • Using vertical bars instead of horizontal
  • Not shifting positions causing overlap
  • Setting yticks incorrectly causing label misalignment
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard