gappy
gappy

Reputation: 10253

Customize axis labels

I have a simple geom_point plot, in which the x variable is ordinal, taking 5 values (coded 1:5).

In the plot I would like to replace it with 5 corresponding text labels. Is it possible to do it in ggplot?

Upvotes: 66

Views: 77448

Answers (4)

Quinten
Quinten

Reputation: 41601

Another option using scale_x_continuous where the breaks and labels are specified on a numerical continuous axis. Here is some reproducible code:

library(ggplot2)
df <- data.frame(x = 1:5, y = sample(1:10, 5, TRUE))
ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  scale_x_continuous(breaks = c(1:5), labels = c("A", "B", "C", "D", "E"))

Created on 2023-02-03 with reprex v2.0.2

Upvotes: 0

Prasad Chalasani
Prasad Chalasani

Reputation: 20282

scale_x_discrete should do it:

x <- sample(1:5, 20, T)
y <- rnorm(20) + x

df <- data.frame(x = ordered(x), y = y)

ggplot(df,aes(x,y)) + geom_point() + 
   scale_x_discrete(breaks = 1:5, labels = letters[1:5])

Upvotes: 13

Chase
Chase

Reputation: 69241

You should be able to do this with scale_x_discrete.

library(ggplot2)
df <- data.frame(x = 1:5, y = sample(1:10, 5, TRUE))

qplot(factor(x),y, data = df) + 
scale_x_discrete(breaks = 1:5, labels=c("foo","bar","baz","phi","fum")) +
xlab(NULL)

Upvotes: 60

Gavin Simpson
Gavin Simpson

Reputation: 174948

Here is a reproducible example I think encapsulates your Q (?):

require(ggplot2)
dat <- data.frame(X = sample(1:5, 100, replace = TRUE),
                  Y = rnorm(100))

It isn't immediately clear what data you have, but if you mean something like this:

(p1 <- ggplot(dat, aes(x = X, y = Y)) + geom_point())

Then I think you want a stripchart, which can be achieved in ggplot via a factor

dat2 <- within(dat, X <- factor(X, labels = letters[1:5]))
(p2 <- ggplot(dat2, aes(x = X, y = Y)) + geom_point())

If this isn't what you mean, can you edit your Q to provide an example?

Upvotes: 3

Related Questions