Believe it or not, this is the best answer to solving the looping problem with ggplot. Most of the answers have a lot of elaborate schemes that I was not able to get to work. This simple one works!! Thanks
Continuously add lines to ggplot with for loop
Hi there,
I have an object called gPlot and I want to continuously add geom_lines to the gPlot object.
# df is a dataframe
sstart ssend
167 2637
552 8273
My following code is :
gPlot<-ggplot() + geom_line(aes(x=1:6549, y=1, colour="red")) + geom_line(aes(x=295:1218, y=.99, colour="blue")) + geom_line(aes(x=3084:4340, y=.99, colour="green"))+coord_cartesian(xlim = c(0, 6549), ylim = c(0,1)) + xlab("coordinates") + ylab("regions")
geomLine <- NULL
for(i in 1:nrow(df)){
rowDF<-df[i,]
dfstart <-rowDF$sstart
dfend<-rowDF$send
geomLine<-gPlot+geom_line(aes(x=dfstart:dfend, y=.95, colour="black"))
}
However, when I plot the new ranges from the df, the plot does not add all the ranges but, just puts the last number range. Any help would be appreciated.
Thanks!
• 21,241 views
•
link
2 answers
I finally solved the above question after staring at the computer. Using aes_string() made it work.
for(i in 1:nrow(stool_polyketide_analysis_df_vfam)){
rowDF<-stool_polyketide_analysis_df_vfam[i,]
dfstart <-rowDF$sstart
dfend<-rowDF$send
gPlot<-gPlot+geom_line(aes_string(x=dfstart:dfend, y=.95-.005*i))
}
• 0 views
•
link
I think the answer is very simple, do not use an aes call. The updated code should look as below:
gPlot<-ggplot() + geom_line(aes(x=1:6549, y=1, colour="red")) + geom_line(aes(x=295:1218, y=.99, colour="blue")) + geom_line(aes(x=3084:4340, y=.99, colour="green"))+coord_cartesian(xlim = c(0, 6549), ylim = c(0,1)) + xlab("coordinates") + ylab("regions")
geomLine <- NULL
for(i in 1:nrow(df)){
rowDF<-df[i,]
dfstart <-rowDF$sstart
dfend<-rowDF$send
geomLine<-gPlot +
geom_line(x=dfstart:dfend, y=.95, colour="black") # new addition
}
• 0 views
•
link
Log in to answer this question.
did you find the reason why this happen in the for loop?