The scale_x_discrete Function in R

Jinku Hu May 26, 2021
  1. Use scale_x_discrete to Reverse Order of Items on x Axis in R Plot
  2. Use scale_x_discrete to Display Subset of Items on x Axis in R
  3. Use scale_x_discrete to Rename Item Labels on x Axis in R
  4. Use scale_x_discrete to Modify x Axis Name in R
The scale_x_discrete Function in R

This article will introduce the scale_x_discrete function in R.

Use scale_x_discrete to Reverse Order of Items on x Axis in R Plot

scale_x_discrete is used to set values for discrete x-axis scale aesthetics. In this article, we construct multiple boxplot graphs using ggplot and geom_boxplot functions to demonstrate the effect of different parameters in scale_x_discrete. It’s often the case that the order of items on the axis needs to be reversed, and the easiest method to accomplish this is to set the limits parameter of the scale_x_discrete parameter with the value of rev(levels(dataset_name$X_axis_items)). Notice that the data-set name comes first, followed by the $ symbol, and then we specify the x-axis data that needs to be reversed.

library(ggplot2)
library(gridExtra)

p1 <- ggplot(Loblolly, aes(x = Seed, y = height)) +
  geom_boxplot(fill = "cyan")

p2 <- ggplot(Loblolly, aes(x = Seed, y = height)) +
  geom_boxplot(fill = "orange") +
  scale_x_discrete(limits = rev(levels(Loblolly$Seed)))

grid.arrange(p1, p2, ncol = 2, nrow =2)

scale_x_discrete in r 1

Use scale_x_discrete to Display Subset of Items on x Axis in R

Another useful feature of the scale_x_discrete function is to eliminate some items from the x-axis and draw only a handful of them. In this case, we utilize the PlantGrowth data-set where three categories of groups are listed. Thus, we can output the boxplot with only trt2 and trt1 groups, as shown in the following code snippet.

library(ggplot2)
library(gridExtra)

p1 <- ggplot(Loblolly, aes(x = Seed, y = height)) +
  geom_boxplot(fill = "cyan")

p2 <- ggplot(Loblolly, aes(x = Seed, y = height)) +
  geom_boxplot(fill = "orange") +
  scale_x_discrete(limits = rev(levels(Loblolly$Seed)))

p3 <- ggplot(PlantGrowth, aes(x = group, y = weight)) +
  geom_boxplot(fill = "pink")

p4 <- ggplot(PlantGrowth, aes(x = group, y = weight)) +
  geom_boxplot(fill = "green") +
  scale_x_discrete(limits = c("trt2", "trt1"))

grid.arrange(p1, p2, p3, p4, ncol = 2, nrow =2)

scale_x_discrete in r 2

Use scale_x_discrete to Rename Item Labels on x Axis in R

The scale_x_discrete function can also be used to rename item labels along the x-axis. New label values can be supplied with the vector assigned to the labels parameter in the scale_x_discrete function.

library(ggplot2)
library(gridExtra)

p1 <- ggplot(PlantGrowth, aes(x = group, y = weight)) +
  geom_boxplot(fill = "cyan")

p2 <- ggplot(PlantGrowth, aes(x = group, y = weight)) +
  geom_boxplot(fill = "pink") +
  scale_x_discrete(
    labels = c("Control", "Treatment 1", "Treatment 2")
  )

grid.arrange(p1, p2, ncol = 2, nrow =2)

scale_x_discrete in r 3

Use scale_x_discrete to Modify x Axis Name in R

Notice that each previous method can be combined to output desired graph structure. E.g., the following example code draws p4 to show only the subset of items and rename these labels with supplied values. Additionally, we utilize scale_x_discrete to modify the name along the x-axis using the name parameter.

library(ggplot2)
library(gridExtra)

p1 <- ggplot(PlantGrowth, aes(x = group, y = weight)) +
  geom_boxplot(fill = "cyan")

p2 <- ggplot(PlantGrowth, aes(x = group, y = weight)) +
  geom_boxplot(fill = "pink") +
  scale_x_discrete(
    labels = c("Control", "Treatment 1", "Treatment 2")
  )

p3 <- ggplot(OrchardSprays, aes(x = treatment, y = decrease)) +
  geom_boxplot(fill = "orange")

p4 <- ggplot(OrchardSprays, aes(x = treatment, y = decrease)) +
  geom_boxplot(fill = "green") +
  scale_x_discrete(
    limits = c("A", "B"),
    labels = c("Alice", "Bob"),
    name = "Treatment"
  )

grid.arrange(p1, p2, p3, p4, ncol = 2, nrow =2)

scale_x_discrete in r 4

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Related Article - R Plot