E Phillips
E Phillips

Reputation: 307

geom_smooth in ggplot2 not working/showing up

I am trying to add a linear regression line to my graph, but when it's run, it's not showing up. The code below is simplified. There are usually multiple points on each day. The graph comes out fine other than that.

    b<-data.frame(day=c('05/22','05/23','05/24','05/25','05/26','05/27','05/28','05/29','05/30','05/31','06/01','06/02','06/03','06/04','06/05','06/06','06/07','06/08','06/09','06/10','06/11','06/12','06/13','06/14','06/15','06/16','06/17','06/18','06/19','06/20','06/21','06/22','06/23','06/24','06/25'),
                  temp=c(10.1,8.7,11.4,11.4,11.6,10.7,9.6,11.0,10.0,10.7,9.5,10.3,8.4,9.0,10.3,11.3,12.7,14.5,12.5,13.2,16.5,19.1,14.6,14.0,15.3,13.0,10.1,8.4,4.6,4.3,4.7,2.7,1.6,1.8,1.9))


gg2 <- ggplot(b, aes(x=day, y=temp, color=temp)) +
  geom_point(stat='identity', position='identity', aes(colour=temp),size=3)


gg2<- gg2 + geom_smooth(method='lm') + scale_colour_gradient(low='yellow', high='#de2d26') 

gg2 <-gg2 + labs(title=filenames[s], x='Date', y='Temperture (Celsius)') + theme(axis.text.x=element_text(angle=-45, vjust=0.5))


gg2

It's probably something really simple, but I can't seem to figure it out. Or it's the fact I am using a date for the x-axis, but I'm not receiving any errors. If it is due to the date, I'm not sure how to approach it. Thanks.

Upvotes: 29

Views: 61609

Answers (2)

Love_qq_xq
Love_qq_xq

Reputation: 168

# sample data
d <- data.frame(expand.grid(x=letters[1:4], g=factor(1:2)), y=rnorm(8))   
# Try the below three different scripts to draw.
ggplot(d, aes(x=x, y=y, colour=g)) + geom_line() + geom_point()
ggplot(d, aes(x=x, y=y, colour=g, group=g))+ geom_line() + geom_point()
ggplot(d, aes(x=x, y=y, colour=g, group=1)) + geom_line() + geom_point()

Key rules: geom_line() tries to connect data points that belong to same group. different levels of factor variable belong to different group.

Upvotes: 4

A Toll
A Toll

Reputation: 807

Currently your date is a factor since you entered in in as a character vector. See class(b$day).

Once you change it to a date, the linear regression will run fine.

b$Day <- as.Date(b$day, format='%m/%d')
# If dates are from 2015, 
# b$Day <- as.Date(b$day, format='%m/%d') - 366
# check with head(b$Day)

gg2 <- ggplot(b, aes(x=Day, y=temp, color=temp)) +
  geom_point(stat='identity', position='identity', aes(colour=temp),size=3)

gg2<- gg2 + geom_smooth(method='lm') + 
  scale_colour_gradient(low='yellow', high='#de2d26') 

gg2 <-gg2 + labs(title=filenames[s], x='Date', y='Temperture (Celsius)') + 
  theme(axis.text.x=element_text(angle=-45, vjust=0.5))

g2

Plot with regression line

Upvotes: 39

Related Questions