Here are a couple of other solutions, use whichever works best for you (after modifications, changing increments, etc.).
radius <- 3 x <- seq(-radius,radius,length=2000) y <- sqrt(radius^2-x^2) xx <- c(x,-x) yy <- c(y,-y) plot(xx,yy, xlim=c(-radius,radius),ylim=c(-radius,radius), type="l", ylab="", xlab="", axes=F) radius <- 2.7 x1 <- seq(-radius,radius,length=2000) y1 <- sqrt(radius^2-x1^2) radius <- 2.0 x2 <- seq(radius,-radius,length=2000) y2 <- sqrt(radius^2-x2^2) #tmp <- rainbow(1000, start=2/6, end=0/6) tmp <- rev(rainbow(1000, start=0/6, end=2/6)) theta <- seq(pi, 0, length=1000) segments(2.7*cos(theta),2.7*sin(theta), 2.0*cos(theta), 2.0*sin(theta), col=tmp, lwd=2) polygon(c(x1,x2),c(y1,y2)) library(TeachingDemos) radius <- 3 x <- seq(-radius,radius,length=2000) y <- sqrt(radius^2-x^2) xx <- c(x,-x) yy <- c(y,-y) plot(xx,yy, xlim=c(-radius,radius),ylim=c(-radius,radius), type="l", ylab="", xlab="", axes=F) radius <- 2.7 x1 <- seq(-radius,radius,length=2000) y1 <- sqrt(radius^2-x1^2) radius <- 2.0 x2 <- seq(radius,-radius,length=2000) y2 <- sqrt(radius^2-x2^2) tmpfun <- function(...){ image( seq(-3,3,length=101), c(-3.24,3.24), matrix( 1:100, ncol=1 ), col=rev(rainbow(100,start=0, end=1/3)), add=TRUE ) } top <- approxfun( x1, y1 ) bottom <- approxfun( c(-3, x2, 3), c(min(y2), y2, min(y2) ) ) xx <- seq(-2.7,2.7, length.out=1000) xxx <- embed(xx,2)[,2:1] for(i in 1:999) { clipplot(tmpfun(), xxx[i,], c( min(bottom(xxx[i,])), max(top(xxx[i,]))) ) } polygon(c(x1,x2),c(y1,y2)) Hope this helps, -- Gregory (Greg) L. Snow Ph.D. Statistical Data Center Intermountain Healthcare [EMAIL PROTECTED] (801) 408-8111 > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Roger Leenders > Sent: Friday, August 15, 2008 6:01 AM > To: r-help@r-project.org > Subject: [R] continuous coloring of a polygon > > > R2.7.1, WinXP > > Hi, > > I have a polygon inside a circle as follows: > > radius <- 3 > x <- seq(-radius,radius,length=2000) > y <- sqrt(radius^2-x^2) > xx <- c(x,-x) > yy <- c(y,-y) > plot(xx,yy, xlim=c(-radius,radius),ylim=c(-radius,radius), > type="l", ylab="", xlab="", axes=F) > > radius <- 2.7 > x1 <- seq(-radius,radius,length=2000) > y1 <- sqrt(radius^2-x1^2) > radius <- 2.0 > x2 <- seq(radius,-radius,length=2000) > y2 <- sqrt(radius^2-x2^2) > > polygon(c(x1,x2),c(y1,y2)) > > (the graph much resembles a speed dial inside a car). > Now I want to fill the polygon with color, such that it > starts on the left with red and ends on the right with green, > following the coloring of the rainbow. > Preferably, the coloring should be "continuous", such that > colors naturally fade into each other. > I can draw the polygon as above, but I don't know how to do > the coloring. It is easy to give the polygon only one color > (e.g. through polygon(c(x1,x2),c(y1,y2), col="red")), but I > need a way in which to color the polygon such that the color > moves through the color spectrum from red (left) to green (right). > Can anyone help me to achieve this? > > Thanks, Roger > > ______________________________________________ > R-help@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. > ______________________________________________ R-help@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.