Bird
Raised Fist0
Matplotlibdata~30 mins

Discrete colorbars in Matplotlib - Mini Project: Build & Apply

Choose your learning style10 modes available
Discrete colorbars
📖 Scenario: You are working on a data visualization project where you want to show different categories with distinct colors. Instead of a smooth gradient, you want a colorbar with clear, separate color blocks.
🎯 Goal: Create a discrete colorbar using matplotlib that shows exactly 4 distinct colors representing 4 categories.
📋 What You'll Learn
Create a list called colors with exactly 4 color names or hex codes.
Create a ListedColormap from the colors list and assign it to cmap.
Create a BoundaryNorm with boundaries [0, 1, 2, 3, 4] and assign it to norm.
Use matplotlib.pyplot to create a figure and axis.
Add a colorbar to the axis using matplotlib.colorbar.ColorbarBase with the cmap and norm.
Display the plot.
💡 Why This Matters
🌍 Real World
Discrete colorbars are useful when you want to show categories or groups clearly in data visualizations, such as different risk levels, types of land use, or survey responses.
💼 Career
Data scientists and analysts often need to create clear and understandable visualizations. Knowing how to make discrete colorbars helps communicate categorical data effectively.
Progress0 / 4 steps
1
Create a list of 4 colors
Create a list called colors with these exact colors: 'red', 'green', 'blue', and 'yellow'.
Matplotlib
Hint

Use square brackets and separate colors with commas.

2
Create a ListedColormap and BoundaryNorm
Import ListedColormap and BoundaryNorm from matplotlib.colors. Then create a ListedColormap called cmap from the colors list. Also create a BoundaryNorm called norm with boundaries [0, 1, 2, 3, 4] and number of colors equal to the length of colors.
Matplotlib
Hint

Use ListedColormap(colors) and BoundaryNorm([0, 1, 2, 3, 4], ncolors=len(colors)).

3
Create figure and axis, add discrete colorbar
Import matplotlib.pyplot as plt. Create a figure and axis using plt.subplots(). Then import ColorbarBase from matplotlib.colorbar and create a colorbar on the axis using ColorbarBase with the cmap and norm. Use orientation='vertical' for the colorbar.
Matplotlib
Hint

Use plt.subplots() and ColorbarBase with the correct arguments.

4
Display the plot
Use plt.show() to display the figure with the discrete colorbar.
Matplotlib
Hint

Use plt.show() to see the colorbar.

Practice

(1/5)
1. What is the main purpose of using a discrete colorbar in a matplotlib plot?
easy
A. To increase the size of the plot figure
B. To create a continuous gradient of colors for smooth data
C. To add labels to the x-axis of a plot
D. To show data with distinct color steps for clear category separation

Solution

  1. Step 1: Understand colorbar types

    Continuous colorbars show smooth color changes, while discrete colorbars use fixed color steps.
  2. Step 2: Identify the purpose of discrete colorbars

    Discrete colorbars help separate data into clear categories using distinct colors.
  3. Final Answer:

    To show data with distinct color steps for clear category separation -> Option D
  4. Quick Check:

    Discrete colorbar = distinct color steps [OK]
Hint: Discrete colorbars separate categories with fixed colors [OK]
Common Mistakes:
  • Confusing discrete with continuous colorbars
  • Thinking colorbars change plot size
  • Mixing colorbar purpose with axis labeling
2. Which of the following code snippets correctly creates a discrete colorbar with 3 color steps using matplotlib?
easy
A. cmap = ListedColormap(['red', 'green', 'blue']) norm = Normalize(0, 3)
B. cmap = LinearSegmentedColormap(['red', 'green', 'blue']) norm = Normalize(0, 3)
C. cmap = ListedColormap(['red', 'green', 'blue']) norm = BoundaryNorm([0, 1, 2, 3], cmap.N)
D. cmap = LinearSegmentedColormap(['red', 'green', 'blue']) norm = BoundaryNorm([0, 1, 2, 3], cmap.N)

Solution

  1. Step 1: Identify correct colormap for discrete colors

    ListedColormap is used for discrete colors, LinearSegmentedColormap is for continuous gradients.
  2. Step 2: Check normalization method

    BoundaryNorm with boundaries defines discrete steps; Normalize is for continuous scaling.
  3. Final Answer:

    cmap = ListedColormap(['red', 'green', 'blue'])\nnorm = BoundaryNorm([0, 1, 2, 3], cmap.N) -> Option C
  4. Quick Check:

    ListedColormap + BoundaryNorm = discrete colorbar [OK]
Hint: Use ListedColormap + BoundaryNorm for discrete colorbars [OK]
Common Mistakes:
  • Using Normalize instead of BoundaryNorm
  • Using LinearSegmentedColormap for discrete colors
  • Incorrect boundary list length
3. What will be the output color for a value of 1.5 in this discrete colorbar setup?
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, BoundaryNorm

cmap = ListedColormap(['yellow', 'orange', 'red'])
norm = BoundaryNorm([0, 1, 2, 3], cmap.N)
color = cmap(norm(1.5))
print(color)
medium
A. (1.0, 1.0, 0.0, 1.0) # yellow color
B. (1.0, 0.647, 0.0, 1.0) # orange color
C. (1.0, 0.0, 0.0, 1.0) # red color
D. (0.5, 0.5, 0.5, 1.0) # gray color

Solution

  1. Step 1: Understand BoundaryNorm mapping

    BoundaryNorm maps values 0-1 to first color (yellow), 1-2 to second (orange), 2-3 to third (red).
  2. Step 2: Find color for value 1.5

    1.5 lies between 1 and 2, so it maps to the second color: orange (RGB approx (1.0, 0.647, 0.0, 1.0)).
  3. Final Answer:

    (1.0, 0.647, 0.0, 1.0) # orange color -> Option B
  4. Quick Check:

    Value 1.5 in 1-2 range = orange [OK]
Hint: Check which boundary interval the value falls into [OK]
Common Mistakes:
  • Choosing first or third color incorrectly
  • Confusing Normalize with BoundaryNorm behavior
  • Misreading boundary intervals
4. Identify the error in this code that tries to create a discrete colorbar with 4 colors:
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, BoundaryNorm

cmap = ListedColormap(['blue', 'green', 'yellow', 'red'])
norm = BoundaryNorm([0, 1, 2, 3], cmap.N)
plt.colorbar(plt.cm.ScalarMappable(norm=norm, cmap=cmap))
plt.show()
medium
A. Boundary list length should be one more than number of colors
B. ListedColormap cannot have more than 3 colors
C. plt.colorbar requires a continuous colormap
D. ScalarMappable is not compatible with BoundaryNorm

Solution

  1. Step 1: Check boundary list length

    BoundaryNorm boundaries must have length = number of colors + 1 to define intervals correctly.
  2. Step 2: Compare boundaries and colors

    Here, 4 colors but only 4 boundaries given; should be 5 boundaries like [0,1,2,3,4].
  3. Final Answer:

    Boundary list length should be one more than number of colors -> Option A
  4. Quick Check:

    Boundaries = colors + 1 [OK]
Hint: Boundaries count = colors count + 1 for discrete colorbars [OK]
Common Mistakes:
  • Using equal boundaries and colors length
  • Thinking ScalarMappable is incompatible
  • Believing ListedColormap limits colors
5. You have data with 5 categories labeled 0 to 4. You want a discrete colorbar with distinct colors for each category and labels shown on the colorbar ticks. Which approach correctly achieves this in matplotlib?
hard
A. Use ListedColormap with 5 colors, BoundaryNorm with boundaries [0,1,2,3,4,5], and set colorbar ticks at [0.5,1.5,2.5,3.5,4.5] with labels ['0','1','2','3','4']
B. Use LinearSegmentedColormap with 5 colors and Normalize from 0 to 4, then set colorbar ticks at [0,1,2,3,4]
C. Use ListedColormap with 4 colors, BoundaryNorm with boundaries [0,1,2,3,4], and set colorbar ticks at [0,1,2,3]
D. Use ListedColormap with 5 colors, Normalize from 0 to 5, and set colorbar ticks at [0,1,2,3,4]

Solution

  1. Step 1: Set colormap and boundaries for 5 categories

    ListedColormap with 5 colors matches 5 categories; BoundaryNorm boundaries must be length 6 for 5 intervals.
  2. Step 2: Position ticks between boundaries

    Ticks at midpoints like 0.5,1.5,... label categories clearly on discrete colorbar.
  3. Final Answer:

    Use ListedColormap with 5 colors, BoundaryNorm with boundaries [0,1,2,3,4,5], and set colorbar ticks at [0.5,1.5,2.5,3.5,4.5] with labels ['0','1','2','3','4'] -> Option A
  4. Quick Check:

    Boundaries + mid-ticks label discrete categories [OK]
Hint: Use boundaries + midpoints for ticks to label categories [OK]
Common Mistakes:
  • Using continuous colormap for discrete data
  • Setting ticks at boundaries instead of midpoints
  • Mismatching number of colors and boundaries
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