Remi.b
Remi.b

Reputation: 18239

ggplot2: Create an empty space on the x-axis

On the below plot, I'd like to create an empty space on the x-axis at position 3. In other word, I'd like that the dots for wt>=3 and the axis scale when wt>=3 are shifted to the right side by some arbitrary chosen value. Does it make sense?

ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()

enter image description here

I could simply modify the my data and add 0.5 to each value of mpg where wt>=3 but it doesn't solve the issue with the x-axis.

I might rephrase my question saying that on the below graph I'd like that the vertical line does not overlap the data and therefore all the data (and also the x-axis) should be shifted to the left by the thickness of the vertical line.

ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() + geom_vline(xintercept=3, size=30)

enter image description here

I was thinking about facet_wrap or viewport. Maybe something like adding a constant to each value of mpg where wt>=3 and then, manually set the values for the x-axis.

Upvotes: 3

Views: 2830

Answers (3)

Henrik
Henrik

Reputation: 67818

Not entirely sure what you are looking for, and I get confused by watching the weird axis on my own plot... Something like this?

mtcars$wt2 <- with(mtcars, ifelse(wt > 3, wt+1, wt))

ggplot(mtcars, aes(x = wt2, y = mpg)) +
  geom_point() +
  annotate("rect", xmin = 3, xmax = 4, ymin = 0, ymax = 35, alpha = 0.2) +
  scale_x_continuous(breaks = round(mtcars$wt2), label = round(mtcars$wt))

enter image description here

Upvotes: 2

user1317221_G
user1317221_G

Reputation: 15461

what about something like this?

mtcars <- transform(mtcars, split = ifelse(wt >= 3, "b", "a" ))

ggplot(mtcars, aes(x = wt, y = mpg)) + 
       geom_point() + 
       facet_wrap(~split, scales = "free_x")

Upvotes: 1

jlhoward
jlhoward

Reputation: 59425

Similar to @ Frank, and tested...

x <- mtcars
x$group <- ""
x[x$wt<3,]$group  <- "1.LIGHT"
x[x$wt>=3,]$group <- "2.HEAVY"

library(ggplot2)
library(grid)    #for unit(...)
ggplot(x, aes(x=wt,y=mpg)) + 
  geom_point() + 
  facet_grid(~group,scales="free",space="free") + 
  theme(panel.margin = unit(2, "lines"))

Produces this:

enter image description here

Upvotes: 1

Related Questions