1

I need to make the following type chart

enter image description here

I've been trying to use ggplot2, do two graphics, paste them and put the line. However, I can not place the line y = 10 . The y = 10 line must traverse the entire graph, as in the image.

The codes he had made are as follows

    library(ggplot2)
    require(gridExtra)


    #test value

    x=0:1:15
    y=0:1:15
    z=15:1:0

    #join values

    ma<-data.frame(x,y)
    ma1<-data.frame(z,y)

    #define graph

    a<-ggplot(data=ma)+geom_line(mapping=aes(x,y))
    b<-ggplot(data=ma1)+geom_line(mapping=aes(z,y))

    #join graph
    c<-grid.arrange(a, b, ncol=2)

    #try insert line y=10

    c + geom_hline(yintercept = 10)



[![enter image description here][2]][2]

Maybe using facets is possible, anyway All help is welcome

UPDATE: Using the link in the comment, i arrive to this

library(ggplot2)
require(gridExtra)
library(gtable)


#test value

x=0:1:15
y=0:1:15
z=15:1:0


#join values

ma<-data.frame(x,y)
ma1<-data.frame(z,y)

#define graph

a<-ggplot(data=ma)+geom_line(color="red",mapping=aes(x,y))+ geom_hline(yintercept = 10,lty=3)
b<-ggplot(data=ma1)+geom_line(mapping=aes(z,y))+ geom_hline(yintercept = 10)

#Convert to gtable
a1<-ggplotGrob(a)
b1<-ggplotGrob(b)

#Work in lines, save line and remove line in before plots

line<-a1$grobs[[6]]$children[[4]]
a1$grobs[[6]]$children[[4]]<-NULL
b1$grobs[[6]]$children[[4]]<-NULL

# Merge gtables
c1<-cbind(a1,b1)
c1<-gtable_add_grob(c1,line,l=4,t=7,r=11,b=1,z=Inf)

#Print plot
grid.newpage()
grid.draw(c1)

enter image description here

However, I obtained the positions of l z r t testing. Anyone know how to get those positions more accurately? Thx everybody

user119144
  • 59
  • 7
  • 1
    Possible duplicate of [Draw lines between two different ("grid.arranged") plots](http://stackoverflow.com/questions/32158374/draw-lines-between-two-different-grid-arranged-plots) – user20650 Feb 26 '17 at 22:26
  • 1
    Hi, i will see the solution in the post, thx – user119144 Feb 27 '17 at 00:13

1 Answers1

2

You need to add the horizontal line to the ggplots not to grid.arrange.

a <- ggplot(data=ma)+geom_line(mapping=aes(x,y)) 
b <- ggplot(data=ma1)+geom_line(mapping=aes(z,y)) 
h <- geom_hline(yintercept = 10)

#join graph
grid.arrange(a+h, b+h, ncol=2)

You can also set the line type to get dashed lines, and set the theme to bw to approximate your desired graph.

h2 <- geom_hline(yintercept = 10, lty=5)
bw <- theme_bw()

#join graph
grid.arrange(a+h2+bw, b+h2+bw, ncol=2)

On principle, I would not have horizontal line traverse the plots, but the comment posted above provides an applicable link on how to do this.

Djork
  • 3,319
  • 1
  • 16
  • 27