Skip to contents

These scales meant to be used with light themes, e.g, theme_sf_light(). While they can be used with dark themes, in general, we recommend pairing scale_colour_*_lights with light themes for better clarity and contrast.


  • While iOS color palettes provide a total of 9 colors, we do not recommend using them for more than 6 groups. The last three colors often collide with other colors in the palette and may affect the clarity of your visualization.

  • See iOS colors for more details on raw colors.


scale_colour_ios_light(order = "contrast", accessible = FALSE, ...)

scale_fill_ios_light(order = "contrast", accessible = FALSE, ...)



Indicates the order of colors in the palette


Indicates whether the accessible set of colors should be used


Arguments passed on to ggplot2::discrete_scale


The names of the aesthetics that this scale works with.


The name of the scale that should be used for error messages associated with this scale.


A palette function that when called with a single integer argument (the number of levels in the scale) returns the values that they should take (e.g., scales::hue_pal()).


The name of the scale. Used as the axis or legend title. If waiver(), the default, the name of the scale is taken from the first mapping used for that aesthetic. If NULL, the legend title will be omitted.


One of:

  • NULL for no breaks

  • waiver() for the default breaks (the scale limits)

  • A character vector of breaks

  • A function that takes the limits as input and returns breaks as output


One of:

  • NULL for no labels

  • waiver() for the default labels computed by the transformation object

  • A character vector giving labels (must be same length as breaks)

  • A function that takes the breaks as input and returns labels as output


One of:

  • NULL to use the default scale values

  • A character vector that defines possible values of the scale and their order

  • A function that accepts the existing (automatic) values and returns new ones


Unlike continuous scales, discrete scales can easily show missing values, and do so by default. If you want to remove missing values from a discrete scale, specify na.translate = FALSE.


If na.translate = TRUE, what aesthetic value should the missing values be displayed as? Does not apply to position scales where NA is always placed at the far right.


Should unused factor levels be omitted from the scale? The default, TRUE, uses the levels that appear in the data; FALSE uses all the levels in the factor.


A function used to create a guide or its name. See guides() for more information.


The super class to use for the constructed scale


if (FALSE) {


ggplot(mtcars, aes(y = mpg, x = as.factor(cyl))) +
  geom_boxplot(aes(color = as.factor(cyl), fill = as.factor(cyl))) +
  labs(x = "Miles Per Gallon", y = "MPG", 
       fill = "Number of Cylinders",
       color = "Number of Cylinders",
       title = "Fuel Economy",
       subtitle = "Fuel economy declines as engines gets bigger",
       caption = "Data from the 1974 Motor Trend US magazine.") +
  theme_sf_light() +
  scale_fill_ios_light() +