I am plotting a time series with mean values of a response variable as points (y-axis) by month (x-axis).
Values lying on the x-axis (i.e. 0 values) are clipped. I can change the limits of the y-axis to include some padding below 0, but I prefer not to.
Is there a way to plot these 0 points in front of, or on-top of the x-axis?
Try this,
q <- qplot(1:10,1:10,size=I(10)) + scale_y_continuous(expand=c(0,0))
gt <- ggplot_gtable(ggplot_build(q))
gt$layout$clip[gt$layout$name=="panel"] <- "off"
grid.draw(gt)

With the release of ggplot2 version 3.0.0, you can simply use coord_cartesian(clip = 'off')
.
library(ggplot2)
qplot(x = 1:10, y = 1:10, size=I(10)) +
scale_y_continuous(expand=c(0,0)) +
coord_cartesian(clip = 'off') +
labs(title = "coord_cartesian(clip = 'off')")
If you're using one of the less commonly-used coord_*
systems or functions (e.g. coord_polar
or coord_flip
), then you can use the clip = 'off'
argument there, too.
my_plot +
coord_flip(clip = 'off')
You can use attribute expand() on the scale_y
Exemple for 10% each side of y scale :
ggplot(mydata, aes(y = value, x = mydate)) +
geom_point() +
scale_y_continuous(expand = c(0.1,0.1))
If you were using base graphics you could use clip().
plot(1:4)
clip(-0.5, 4.1, -0.5, 4.1)
points(0.85, 1, col = 'red', cex = 2)
来源:https://stackoverflow.com/questions/9690648/avoid-clipping-of-points-along-axis-in-ggplot