[R] How to avoid ggplot clipping the x axis [damn, replaces previous Email]

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Sun Jan 10 19:10:16 CET 2021


Hello,

You are almost there.

With scale_x_continuous use argument limits.


ggplot(dat = tibDat,
        aes(x = x, y = y)) +
   geom_point() +
   scale_x_continuous(breaks = 1:6, labels = 1:6,
                      limits = c(1, 6))


And with xlim it's not a vector c(1, 6), it's each element on its own:

xlim(1, 6)


Or

lims(x = c(1, 6))


But with these two, the labels are not like you want them, they are 2 by 2.

Hope this helps,

Rui Barradas

Às 10:34 de 10/01/21, Chris Evans escreveu:
> [I must try to remember that swapping between Rstudio and my Emailer is a recipe for hitting ctrl-enter and posting prematurely: sorry!]
> 
> I am sure I am doing something stupid but I can't see what. I am plotting data and want the x axis labels to reflect the theoretical range of the x variable which happens to be 1:6 but the observed values have range 2.6 to 5.9.
> 
> I thought xlim(c(1,6)) should have got me that quite simply but it doesn't. I think this is a reproducible example of my failures (!)
> library(tidyverse)
> library(ggplot2)
> x <- seq(2,5.8,.2)
> list(x = x,
> y = rnorm(length(x))) %>%
> as_tibble() -> tibDat
> 
> ggplot(dat = tibDat,
> aes(x = x, y = y)) +
> geom_point() +
> xlim(c(1,6))
> # x labels on plot are 2, 4 & 6
> 
> ggplot(dat = tibDat,
> aes(x = x, y = y)) +
> geom_point() +
> expand_limits(x = c(1,6))
> # same
> 
> ggplot(dat = tibDat,
> aes(x = x, y = y)) +
> geom_point() +
> scale_x_continuous(breaks = 1:6, labels = 1:6)
> # x labelled at 2:5 (why?!)
> 
> ggplot(dat = tibDat,
> aes(x = x, y = y)) +
> geom_point() +
> xlim(c(1,6)) +
> coord_cartesian(clip = "off")
> # back to 2, 4, 6
> 
> ggplot(dat = tibDat,
> aes(x = x, y = y)) +
> geom_point() +
> xlim(c(1,6)) +
> coord_cartesian(expand = TRUE)
> # same
> 
> ### OK, getting desperately hopeful
> ggplot(dat = tibDat,
> aes(x = x, y = y)) +
> geom_point() +
> xlim(c(0,6))
> # x axis has 0, 2, 4 and 6 (surely inconsistent behaviour?)
> 
> ggplot(dat = tibDat,
> aes(x = x, y = y)) +
> geom_point() +
> xlim(c(0.1,6))
> # x axis has 0, 2, 4 and 6
> 
> Can anyone see the simple answer that is eluding me?!
> 
> TIA,
> 
> Chris
> 
>



More information about the R-help mailing list