Janesh Devkota
2013-Jan-21 21:21 UTC
[R] Very slow in processing the equation in the scatter plot ggplot
Hello All,
I have plotted a scatter plot in ggplot2 and added a regression line and a
regression equation. But the processing is very very slow. One reason might
be because I have so many data pairs. Is there any way to speed up this
code ? I need to create a multiple layout as well.
The code I have used is as follows:
setwd("C:/Users/jzd0009/Documents/R software")
mydata <- read.table("dataset.csv",header=TRUE,sep=",")
library(ggplot2)
p <-
ggplot(mydata,aes(date))+geom_line(aes(y=modeled,colour="modeled"))+geom_line(aes(y=observed,colour="observed"))
p
p1 <- ggplot(mydata, aes(modeled,observed))+geom_point(aes(y=observed))
#p1 <- p1+stat_smooth()
lm_eqn = function(mydata){
m = lm(modeled ~ observed, mydata);
eq <- substitute(italic(y) == a + b %.%
italic(x)*","~~italic(r)^2~"="~r2,
list(a = format(coef(m)[1], digits = 2),
b = format(coef(m)[2], digits = 2),
r2 = format(summary(m)$r.squared, digits = 3)))
as.character(as.expression(eq));
}
p1 <- p1 + geom_text(aes(x = -0.1, y = 0.5, label = lm_eqn(mydata)), parse
= TRUE)
p1 <-
p1+geom_smooth(method="lm",se=FALSE,color="green",formula=y~x,lwd=2)
p1
#For multiple layout
library(grid)
grid.newpage()
pushViewport(viewport(layout=grid.layout(2,2)))
vplayout <- function(x,y)
viewport(layout.pos.row=x,layout.pos.col=y)
print(p,vp=vplayout(1,1))
print(p1,vp=vplayout(1,2))
print(p,vp=vplayout(2,1))
print(p1,vp=vplayout(2,2))
The data for the above code can be found on
https://www.dropbox.com/s/1xrgvnge0prf0a6/dataset.csv
Thank you so much.
Best Regards,
Janesh Devkota
[[alternative HTML version deleted]]
Ista Zahn
2013-Jan-21 21:46 UTC
[R] Very slow in processing the equation in the scatter plot ggplot
Hi, One problem is that you are printing the regression equation multiple times. Compare:> system.time({+ p2 <- p1 + annotate(x = -0.1, y = 0.5, geom="text", label lm_eqn(mydata), parse = TRUE) + print(p2) + }) user system elapsed 0.930 0.006 0.976> system.time({+ p3 <- p1 + geom_text(aes(x = -0.1, y = 0.5, label lm_eqn(mydata)), parse = TRUE) + print(p3) + }) user system elapsed 38.667 0.046 38.956 So, use annotate instead of geom_text (as a bonus the equation will look better). Further speedups are possible, but this is probably the biggest problem. Best, Ista On Mon, Jan 21, 2013 at 4:21 PM, Janesh Devkota <janesh.devkota at gmail.com> wrote:> Hello All, > > I have plotted a scatter plot in ggplot2 and added a regression line and a > regression equation. But the processing is very very slow. One reason might > be because I have so many data pairs. Is there any way to speed up this > code ? I need to create a multiple layout as well. > > The code I have used is as follows: > > setwd("C:/Users/jzd0009/Documents/R software") > mydata <- read.table("dataset.csv",header=TRUE,sep=",") > library(ggplot2) > p <- > ggplot(mydata,aes(date))+geom_line(aes(y=modeled,colour="modeled"))+geom_line(aes(y=observed,colour="observed")) > p > > > p1 <- ggplot(mydata, aes(modeled,observed))+geom_point(aes(y=observed)) > #p1 <- p1+stat_smooth() > > lm_eqn = function(mydata){ > m = lm(modeled ~ observed, mydata); > eq <- substitute(italic(y) == a + b %.% > italic(x)*","~~italic(r)^2~"="~r2, > list(a = format(coef(m)[1], digits = 2), > b = format(coef(m)[2], digits = 2), > r2 = format(summary(m)$r.squared, digits = 3))) > as.character(as.expression(eq)); > } > p1 <- p1 + geom_text(aes(x = -0.1, y = 0.5, label = lm_eqn(mydata)), parse > = TRUE) > p1 <- p1+geom_smooth(method="lm",se=FALSE,color="green",formula=y~x,lwd=2) > p1 > > #For multiple layout > > library(grid) > grid.newpage() > pushViewport(viewport(layout=grid.layout(2,2))) > vplayout <- function(x,y) > viewport(layout.pos.row=x,layout.pos.col=y) > print(p,vp=vplayout(1,1)) > print(p1,vp=vplayout(1,2)) > print(p,vp=vplayout(2,1)) > print(p1,vp=vplayout(2,2)) > > > The data for the above code can be found on > https://www.dropbox.com/s/1xrgvnge0prf0a6/dataset.csv > > Thank you so much. > > Best Regards, > Janesh Devkota > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > 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.