Bird
Raised Fist0
Matplotlibdata~10 mins

Discrete colorbars in Matplotlib - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a discrete colorbar with 5 colors.

Matplotlib
import matplotlib.pyplot as plt
import numpy as np

cmap = plt.cm.get_cmap('viridis', [1])
fig, ax = plt.subplots()
fig.colorbar(plt.cm.ScalarMappable(cmap=cmap), ax=ax, ticks=range(6))
plt.show()
Drag options to blanks, or click blank then click option'
A5
B10
C3
D7
Attempts:
3 left
💡 Hint
Common Mistakes
Using a number that is too large or too small for the discrete colors.
Forgetting to pass the number of colors to get_cmap.
2fill in blank
medium

Complete the code to set the colorbar ticks correctly for 4 discrete colors.

Matplotlib
import matplotlib.pyplot as plt
import numpy as np

cmap = plt.cm.get_cmap('plasma', 4)
fig, ax = plt.subplots()
cb = fig.colorbar(plt.cm.ScalarMappable(cmap=cmap), ax=ax, ticks=[1])
plt.show()
Drag options to blanks, or click blank then click option'
A[0, 1, 2, 3, 4]
B[1, 2, 3, 4]
C[0.25, 0.5, 0.75, 1]
D[0, 1, 2, 3]
Attempts:
3 left
💡 Hint
Common Mistakes
Using only 4 ticks for 4 colors, which misses the last boundary.
Using fractional ticks that don't align with color boundaries.
3fill in blank
hard

Fix the error in the code to create a discrete colorbar with 3 colors.

Matplotlib
import matplotlib.pyplot as plt

cmap = plt.cm.get_cmap('coolwarm', 3)
fig, ax = plt.subplots()
cb = fig.colorbar(plt.cm.ScalarMappable(cmap=cmap), ax=ax, ticks=range([1]))
plt.show()
Drag options to blanks, or click blank then click option'
A2
B3
C4
D5
Attempts:
3 left
💡 Hint
Common Mistakes
Using ticks range(3) which only gives 3 ticks for 3 colors.
Not setting the number of colors in get_cmap.
4fill in blank
hard

Fill both blanks to create a discrete colorbar with 6 colors and ticks from 0 to 6.

Matplotlib
import matplotlib.pyplot as plt

cmap = plt.cm.get_cmap('[1]', [2])
fig, ax = plt.subplots()
fig.colorbar(plt.cm.ScalarMappable(cmap=cmap), ax=ax, ticks=range(7))
plt.show()
Drag options to blanks, or click blank then click option'
Atab10
B5
C6
Dviridis
Attempts:
3 left
💡 Hint
Common Mistakes
Using a continuous colormap name without specifying discrete colors.
Mismatch between number of colors and ticks.
5fill in blank
hard

Fill all three blanks to create a discrete colorbar with 4 colors, ticks from 0 to 4, and label the ticks with names.

Matplotlib
import matplotlib.pyplot as plt
import numpy as np

labels = ['Low', 'Medium', 'High', 'Very High']
cmap = plt.cm.get_cmap('[1]', [2])
fig, ax = plt.subplots()
cb = fig.colorbar(plt.cm.ScalarMappable(cmap=cmap), ax=ax, ticks=range([3]))
cb.ax.set_yticklabels(labels)
plt.show()
Drag options to blanks, or click blank then click option'
Acoolwarm
B4
C5
Dviridis
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong number of ticks for the number of colors.
Not matching labels count with colors.

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