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 -------------- next part -------------- A non-text attachment was scrubbed... Name: example.pdf Type: application/pdf Size: 32195 bytes Desc: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20170213/fc5df8cb/attachment.pdf>
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-bounces at r-project.org] On Behalf Of swaraj basu Sent: Monday, February 13, 2017 10:34 AM To: r-help at 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 -------------- next part -------------- A non-text attachment was scrubbed... Name: mtDNAplot.png Type: image/png Size: 5241 bytes Desc: mtDNAplot.png URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20170213/1ca44fe5/attachment.png>
If you don't get a reply here: 1. Search! (try rseek.org as an R search engine). 2. Try the Bioconductor list. As this appears to be closer to their realm, they may have what you're looking for. Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Mon, Feb 13, 2017 at 8:33 AM, swaraj basu <projectbasu at gmail.com> wrote:> 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 > > ______________________________________________ > R-help at 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.
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 <dcarlson at 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-bounces at r-project.org] On Behalf Of swaraj > basu > Sent: Monday, February 13, 2017 10:34 AM > To: r-help at 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]]