Hi Swaraj, As David pointed out, you can get the arcs without too much trouble:
library(plotrix) mdf<-data.frame(score=c(-1,7,4,-7),start=c(0,0,600,800), finish=c(100,200,800,1250)) par(mar=c(4,4,1,1)) plot(0,type="n",xlim=c(-20,20),ylim=c(-20,20),xlab="",ylab="", xaxt="n",yaxt="n") axis(1,at=c(-20,-10,0,10,20),labels=c(10,0,-10,0,10)) axis(2,at=c(-20,-10,0,10,20),labels=c(10,0,-10,0,10)) draw.circle(0,0,10,lty=2,border="black") mlength<-1500 for(i in 1:dim(mdf)[1]) { draw.arc(0,0,10+mdf$score[i], angle1=2*pi*mdf$start[i]/mlength, angle2=2*pi*mdf$finish[i]/mlength, lwd=3,col=ifelse(mdf$score[i]<0,"red","blue")) } However, you may want a circular grid as well as clockwise angles: par(mar=c(1,1,1,1)) plot(0,type="n",xlim=c(-6,6),ylim=c(-6,6), xlab="",ylab="",axes=FALSE) radial.grid(seq(0,1250,by=250),radial.lim=c(0,10), label.pos=seq(0,12.5/15,by=2.5/15)*2*pi, grid.pos=seq(0,12.5/15,by=2.5/15)*2*pi, start=pi/2,clockwise=TRUE) for(i in 1:dim(mdf)[1]) { draw.arc(0,0,(10+mdf$score[i])/4.5, deg1=450-360*mdf$start[i]/mlength, deg2=450-360*mdf$finish[i]/mlength, lwd=3,col=ifelse(mdf$score[i]<0,"red","blue")) } Both of these examples are pretty messy, but could be improved if you have a lot of work like this. Jim On Tue, Feb 14, 2017 at 8:58 AM, swaraj basu <projectb...@gmail.com> wrote: > Thank you David, I could get the circle at 12 and clockwise however I > believe my solution is not the optimal one, could you help me out with the > best way to generate the circle clockwise at 12 and then convert the > begin/stop to radians > > Here is what I tried > > par(mar=c(2,2,2,2),xpd=TRUE); > plot(c(1,800),c(1,800),type="n",axes=FALSE,xlab="",ylab="",main=""); > DrawCircle (x=400,y=400,r.out = 400, r.in = 400, theta.1=1.57, > theta.2=-2*pi-4.67, lwd=1) > > On Mon, Feb 13, 2017 at 6:52 PM, David L Carlson <dcarl...@tamu.edu> wrote: > >> You can do this easily with the DrawCircle() function in package >> DescTools. It is easiest to use geometric coordinates (0 is at 3 o'clock >> and moves counterclockwise around the circle), but it could be converted to >> 12 o'clock and clockwise: >> >> library(DescTools) >> >> # Convert begin/stop to radians >> dat$begin <- 0 + 2 * pi * dat$start/1500 >> dat$stop <- 0 + 2 * pi * dat$end/1500 >> >> # Open blank plot window and draw circles >> Canvas(xlim = c(-5,5), xpd=TRUE) >> DrawCircle (r.out = 5, r.in = 5, theta.1=.05, theta.2=2*pi-.05, lwd=3) >> with(dat, DrawCircle(r.out = 5 - score/5, r.in = 5 - score/5, >> theta.1=begin, theta.2=stop, border=col, lwd=4)) >> text(5.2, .4, "1", pos=4) >> text(5.2, -.4, "1500", pos=4) >> >> ------------------------------------- >> David L Carlson >> Department of Anthropology >> Texas A&M University >> College Station, TX 77840-4352 >> >> >> >> >> -----Original Message----- >> From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of swaraj >> basu >> Sent: Monday, February 13, 2017 10:34 AM >> To: r-help@r-project.org >> Subject: [R] Circular plot >> >> I want to plot segments deleted from mitochondrial DNA of patients with >> neuromuscular disorders. I generate the plot on a linear chromosome using a >> code similar to as shown below >> >> start<-c(1,5,600,820) >> end<-c(250,75,810,1200) >> score<-c(7,-1,4,-6.5) >> dat<-data.frame(start=start,end=end,score=score,col="blue" >> ,stringsAsFactors=F) >> dat[dat$score<0,]$col<-"red" >> >> plot(1:1500,rep(0,1500),type="p",ylim=c(-10,10),col="white", >> xlab="position",ylab="score") >> segments(dat$start, dat$score, dat$end, dat$score, col=dat$col, lwd=3) >> >> >> Since the human mitochondria is a circular genome, I would like to >> visualise the plot generated above as a circle where all segments with >> positive score lie inside the circle and those with negative score lie >> outside. Attached is a representation of my requirement, although here it >> is manually drawn. Can someone help me on this? >> >> >> -- >> Swaraj Basu >> > > > > -- > Swaraj Basu > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.