After many tries, here is a solution using grob.
I post here in case it could help someone.
Note that this solution is not 100% optimal as it uses a trick (limits = c(-0.05, 1.02)) to show fully the points.

Marc

library("ggplot2"); require("gtable"); require("grid")

p <- ggplot()+
  geom_point(aes(x=c(20, 29, 32), y=c(0, 0.4, 1)))+
  scale_y_continuous(breaks=c(0, 0.25, 0.5, 0.75, 1),
                     expand = c(0, 0), limits = c(-0.05, 1.02))+
  xlim(20, 32) +
  labs(x="Label for x axis")+
  labs(y="Label for y axis") +
  geom_segment(aes(x=25, xend=25, y=0, yend=1), linetype=2)+
  # This part is just to make it more nice
  theme(panel.background = element_rect(fill = 'white'),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        plot.margin = unit(c(0.5, 1, 0.5, 0.5), "cm"),
        axis.text.x=element_text(size=14),
        axis.text.y=element_text(size=14),
        axis.title.x=element_text(size=18),
        axis.title.y=element_text(size=18),
        axis.ticks.length=unit(0.3,"cm"),
        panel.border = element_blank(),
        axis.line.x = element_line(),
        axis.line.y = element_line())


# I prepare the legend to be shown at the top
plegend <- ggplot() +
  geom_blank() +
  geom_segment(aes(x=25, xend=25, y=0, yend=0.4), linetype=2) +
  annotate("text", x = 25 , y=0.5, label="Text 1")+
  scale_y_continuous(expand=c(0,0), limits = c(0,1)) +
  scale_x_continuous(limits = c(20, 32)) +
  theme_minimal() + theme(line=element_blank(),
                          text=element_blank(),
                          panel.background=element_blank())

# extract the panel only
gl <- gtable_filter(ggplotGrob(plegend), "panel")

# And draw both
g <- ggplotGrob(p)
g <- gtable_add_rows(x = g, heights = unit(2, "cm"), pos = 0)
g <- gtable_add_grob(g, gl, t = 2, l=4, b=1, r=4)
grid.newpage()
grid.draw(g)



Le 24/10/2016 à 13:08, Marc Girondot via R-help a écrit :
Hello everybody,

Using ggplot2 package, is there a way to force to stop the y-axis line at a specified point ? (not using ylim because I want that some text written using annotate() at the top of the graph is still shown).

Bellow is a simple example to show what I would like do:

Thanks a lot

Marc





library("ggplot2")

g <- ggplot()+
  geom_point(aes(x=c(20, 29, 32), y=c(0, 0.4, 1)))+
  scale_y_continuous(breaks=c(0, 0.25, 0.5, 0.75, 1))+
  labs(x="Label for x axis")+
  labs(y="Label for y axis") +
  annotate("text", x = 25 , y=1.2, label="Text 1")+
annotate("text", x = 22 , y=1.0, label="How to stop the y-axis line here !")+
  geom_segment(aes(x=25, xend=25, y=0, yend=1.1), linetype=2)+
  # This part is just to make it more nice
  theme(panel.background = element_rect(fill = 'white'),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        plot.margin = unit(c(0.5, 1, 0.5, 0.5), "cm"),
        axis.text.x=element_text(size=14),
        axis.text.y=element_text(size=14),
        axis.title.x=element_text(size=18),
        axis.title.y=element_text(size=18),
        axis.ticks.length=unit(0.3,"cm"),
        panel.border = element_blank(),
        axis.line.x = element_line(),
        axis.line.y = element_line())
g

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.



--
__________________________________________________________
Marc Girondot, Pr

Laboratoire Ecologie, Systématique et Evolution
Equipe de Conservation des Populations et des Communautés
CNRS, AgroParisTech et Université Paris-Sud 11 , UMR 8079
Bâtiment 362
91405 Orsay Cedex, France

Tel:  33 1 (0)1.69.15.72.30   Fax: 33 1 (0)1.69.15.73.53
e-mail: marc.giron...@u-psud.fr
Web: http://www.ese.u-psud.fr/epc/conservation/Marc.html
Skype: girondot

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to