Bird
Raised Fist0
R Programmingprogramming~20 mins

Color scales and palettes in R Programming - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Color Scale Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of a basic colorRampPalette function
What is the output of this R code snippet?
R Programming
pal <- colorRampPalette(c("red", "blue"))
colors <- pal(3)
print(colors)
A[1] "#FF0000" "#400080" "#0000FF"
B[1] "red" "purple" "blue"
C[1] "#FF0000" "#FF00FF" "#0000FF"
D[1] "#FF0000" "#800080" "#0000FF"
Attempts:
2 left
💡 Hint
colorRampPalette creates a gradient of colors between the given colors.
🧠 Conceptual
intermediate
2:00remaining
Understanding colorRamp vs colorRampPalette
Which statement correctly describes the difference between colorRamp and colorRampPalette in R?
AcolorRampPalette interpolates colors as numeric RGB values; colorRamp returns hex color strings.
BcolorRamp generates a vector of colors; colorRampPalette returns RGB values only.
CcolorRamp returns a function that interpolates colors as RGB values; colorRampPalette returns a function that generates a vector of colors as hex strings.
DBoth functions return the same output but differ in input format.
Attempts:
2 left
💡 Hint
Think about what type of output each function produces.
❓ Predict Output
advanced
2:00remaining
Output of a custom palette with transparency
What is the output of this R code?
R Programming
pal <- colorRampPalette(c("#FF000080", "#0000FF80"), alpha = TRUE)
colors <- pal(2)
print(colors)
A[1] "#FF0000FF" "#0000FFFF"
B[1] "#FF000080" "#0000FF80"
C[1] "#FF0000" "#0000FF"
D[1] "#FF0080" "#000080"
Attempts:
2 left
💡 Hint
Check how colorRampPalette handles alpha transparency in hex colors.
❓ Predict Output
advanced
2:00remaining
Number of colors generated by brewer.pal
What is the length of the vector returned by brewer.pal(5, "Set1") in R?
R Programming
library(RColorBrewer)
colors <- brewer.pal(5, "Set1")
length(colors)
A5
B8
C3
D7
Attempts:
2 left
💡 Hint
brewer.pal returns the number of colors requested up to the palette maximum.
🔧 Debug
expert
2:00remaining
Identify the error in this colorRampPalette usage
What error does this R code produce?
R Programming
pal <- colorRampPalette(c(123, 456))
colors <- pal(3)
print(colors)
AError in colorRampPalette: 'colors' must be character vector
BError in pal(3): invalid number of colors requested
CNo error; outputs three colors
DError in print: object 'colors' not found
Attempts:
2 left
💡 Hint
Check the input types for colorRampPalette.

Practice

(1/5)
1. What is the main difference between a color scale and a color palette in R visualization?
easy
A. Color scales and palettes are exactly the same in R.
B. Color scales assign fixed colors to categories, palettes show smooth color changes for continuous data.
C. Color scales are used only for bar charts, palettes only for scatter plots.
D. Color scales show smooth color changes for continuous data, palettes assign fixed colors to categories.

Solution

  1. Step 1: Understand color scales

    Color scales map continuous data values to a gradient of colors smoothly changing from one to another.
  2. Step 2: Understand color palettes

    Color palettes assign specific, fixed colors to discrete categories or groups.
  3. Final Answer:

    Color scales show smooth color changes for continuous data, palettes assign fixed colors to categories. -> Option D
  4. Quick Check:

    Color scales = continuous gradient, palettes = fixed category colors [OK]
Hint: Remember: scales = smooth gradient, palettes = fixed colors [OK]
Common Mistakes:
  • Confusing continuous and categorical data use
  • Thinking palettes create gradients
  • Assuming scales only for discrete data
2. Which of the following is the correct syntax to apply a continuous color scale using the viridis palette in ggplot2?
easy
A. + scale_color_viridis_c()
B. + scale_color_manual(values = viridis)
C. + scale_fill_viridis_d()
D. + scale_color_gradient(low = 'blue', high = 'red')"

Solution

  1. Step 1: Identify continuous color scale function

    In ggplot2, scale_color_viridis_c() applies a continuous viridis color scale.
  2. Step 2: Check other options

    scale_color_manual() is for manual discrete colors, scale_fill_viridis_d() is for discrete fill colors, and scale_color_gradient() is a generic gradient, not viridis.
  3. Final Answer:

    + scale_color_viridis_c() -> Option A
  4. Quick Check:

    Continuous viridis scale = scale_color_viridis_c() [OK]
Hint: Use _c suffix for continuous scales in ggplot2 [OK]
Common Mistakes:
  • Using _d suffix for continuous data
  • Confusing fill and color scales
  • Passing palette name to scale_color_manual incorrectly
3. What will be the output of this R code snippet?
library(ggplot2)
data <- data.frame(x = 1:5, y = 1:5, z = c(10, 20, 30, 40, 50))
ggplot(data, aes(x, y, color = z)) +
  geom_point(size = 5) +
  scale_color_gradient(low = 'yellow', high = 'red')
medium
A. Points colored with default ggplot2 palette ignoring scale
B. Points colored from yellow (low z) to red (high z) smoothly
C. Error because scale_color_gradient requires fill aesthetic
D. Points colored only yellow regardless of z values

Solution

  1. Step 1: Understand the mapping

    The color aesthetic is mapped to numeric variable z, so a continuous color scale applies.
  2. Step 2: Analyze scale_color_gradient

    This function creates a smooth gradient from low color (yellow) to high color (red) for the points.
  3. Final Answer:

    Points colored from yellow (low z) to red (high z) smoothly -> Option B
  4. Quick Check:

    scale_color_gradient maps numeric to gradient colors [OK]
Hint: Continuous color mapped with scale_color_gradient(low, high) [OK]
Common Mistakes:
  • Thinking scale_color_gradient only works with fill
  • Expecting discrete colors instead of gradient
  • Ignoring the color aesthetic mapping
4. Identify the error in this R code that tries to use a palette for discrete colors:
library(ggplot2)
data <- data.frame(x = factor(c('A','B','C')), y = c(3,5,2))
ggplot(data, aes(x, y, fill = x)) +
  geom_bar(stat = 'identity') +
  scale_fill_gradientn(colors = c('red', 'green', 'blue'))
medium
A. geom_bar requires color aesthetic, not fill
B. Missing + sign before scale_fill_gradientn
C. Using scale_fill_gradientn for discrete fill instead of scale_fill_manual or scale_fill_brewer
D. Data x variable should be numeric, not factor

Solution

  1. Step 1: Check data and aesthetics

    The fill aesthetic is mapped to a factor variable x, which is discrete.
  2. Step 2: Analyze scale function

    scale_fill_gradientn() is for continuous gradients, not discrete palettes. For discrete fill, use scale_fill_manual() or scale_fill_brewer().
  3. Final Answer:

    Using scale_fill_gradientn for discrete fill instead of scale_fill_manual or scale_fill_brewer -> Option C
  4. Quick Check:

    Discrete fill needs manual or brewer palettes, not gradientn [OK]
Hint: Use manual or brewer scales for discrete colors, not gradientn [OK]
Common Mistakes:
  • Using gradient scales for discrete variables
  • Forgetting + sign before scale function
  • Confusing fill and color aesthetics
5. You want to create a ggplot scatter plot with points colored by a numeric variable but want to highlight values above 50 in red and others in a blue-to-green gradient. Which approach correctly applies this custom color scale?
hard
A. Use scale_color_gradient with low='blue', high='green' and add geom_point with color='red' for points > 50 separately
B. Use a custom color scale with a conditional color vector inside scale_color_manual
C. Use scale_color_gradientn with colors = c('blue', 'green', 'red') and breaks at 50
D. Create a new factor variable for >50 and <=50, then use scale_color_manual with c('bluegreen', 'red')"

Solution

  1. Step 1: Understand the requirement

    We want a gradient color for values <= 50 and red color for values > 50.
  2. Step 2: Analyze options

    Use scale_color_gradient with low='blue', high='green' and add geom_point with color='red' for points > 50 separately suggests using a gradient scale for all points and layering a separate geom_point with red color for points > 50, which correctly highlights those points.
  3. Step 3: Why others fail

    Use a custom color scale with a conditional color vector inside scale_color_manual tries conditional colors inside scale_color_manual which expects discrete values, not numeric. Use scale_color_gradientn with colors = c('blue', 'green', 'red') and breaks at 50 mixes gradient colors but cannot isolate >50 in red. Create a new factor variable for >50 and <=50, then use scale_color_manual with c('bluegreen', 'red')" changes variable to factor but loses gradient effect.
  4. Final Answer:

    Use scale_color_gradient with low='blue', high='green' and add geom_point with color='red' for points > 50 separately -> Option A
  5. Quick Check:

    Separate layers for highlight + gradient for others [OK]
Hint: Layer points with red color separately to highlight above threshold [OK]
Common Mistakes:
  • Trying to mix discrete and continuous scales in one scale
  • Using scale_color_manual for numeric gradient
  • Not layering points for highlight
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