Chera Maan
Chera Maan

Reputation: 73

How to draw multiple line segment in ggplot

#Input data
df1<- data.frame(Gradient=rep(c(0,5,10,15), each=5),
                 load=c(0,4.4,10.7,17,21.4),
                vo2max=c(28.0,28.2,31.0,32.0,34.6,41.0,41.1,45.4,48.8,50.5,56.3,57.0,
                         63.6,66.8,69.9,71.3,75.0,82.1,85.5,89.3))
head(df1)
sp<-ggplot(data=df1, aes(x=load, y=VO2max, group=Gradient)) +
  geom_line()+
  geom_point()
#Horizontal line segment
sp+geom_segment(aes(x=0,y=50,xend=25,yend=50))
sp+geom_segment(aes(x=0,y=60,xend=25,yend=60))``
sp+geom_segment(aes(x=0,y=75,xend=25,yend=75))

How to draw the three line segments in the same graph? I'm able to draw only one line segment at a time.

Upvotes: 4

Views: 5502

Answers (3)

Limey
Limey

Reputation: 12461

ggplot(data=df1, aes(x=load, y=vo2max, group=Gradient)) +
  geom_line()+
  geom_point() + 
  geom_segment(
    data=tibble(), 
    aes(
      x=c(0, 0, 0),
      y=c(50, 60, 75),
      xend=c(25, 25, 25),
      yend=c(50, 60, 75)
    ), 
    inherit.aes=FALSE
  )

Also consider geom_hline().

Upvotes: 1

r2evans
r2evans

Reputation: 160417

Just add them all together.

sp +
  geom_segment(aes(x=0,y=50,xend=25,yend=50)) +
  geom_segment(aes(x=0,y=60,xend=25,yend=60)) +
  geom_segment(aes(x=0,y=75,xend=25,yend=75))

enter image description here

Upvotes: 2

s_baldur
s_baldur

Reputation: 33488

Put the data into a data.frame:

line_df <- data.frame(
  x = 0,
  y = c(50, 60, 75),
  xend = 25,
  yend = c(50, 60, 75)
)

sp +
  geom_segment(
    data = line_df, 
    mapping = aes(x=x, y=y, xend=xend, yend=yend), 
    inherit.aes = FALSE
  )

Upvotes: 5

Related Questions