[R] draw stripes in a circle in R
David Winsemius
dwinsemius at comcast.net
Wed Jun 14 19:29:47 CEST 2017
> On Jun 14, 2017, at 10:18 AM, David Winsemius <dwinsemius at comcast.net> wrote:
>
>
>> On Jun 14, 2017, at 9:46 AM, Jeff Newmiller <jdnewmil at dcn.davis.ca.us> wrote:
>>
>> I don't see a question. If your question is whether R supports pattern fills, AFAIK it does not. If that is not your question, ask one.
>> --
>> Sent from my phone. Please excuse my brevity.
>>
>> On June 14, 2017 7:57:41 AM PDT, jean-philippe <jeanphilippe.fontaine at gssi.infn.it> wrote:
>>> dear R users,
>>>
>>> I would like to fill a circle with yellow stripes instead of a uniform
>>> yellow color. To draw the circle I used the following command after
>>> having loaded the (very nice !) plotrix library :
I finally understood the question and it needs a hack to the draw.circle function in plotrix since the angle and density arguments don't get passed in:
First get code for draw.circle:
------
draw.circle # then copy to console and edit
draw.circle2 <- function (x, y, radius, nv = 100, border = NULL, col = NA, lty = 1,
density=NA, angle=45, lwd = 1 )
{
xylim <- par("usr")
plotdim <- par("pin")
ymult <- getYmult()
angle.inc <- 2 * pi/nv
angles <- seq(0, 2 * pi - angle.inc, by = angle.inc)
if (length(col) < length(radius))
col <- rep(col, length.out = length(radius))
for (circle in 1:length(radius)) {
xv <- cos(angles) * radius[circle] + x
yv <- sin(angles) * radius[circle] * ymult + y
polygon(xv, yv, border = border, col = col, lty = lty, density=density, angle=angle,
lwd = lwd)
}
invisible(list(x = xv, y = yv))
}
Now run your call to pdf with draw.circle2 instead of draw.circle
Best;
David.
>>>
>>> library(plotrix)
>>> pdf("MWE.pdf",width=8, height=8)
>>> plot(seq(-12.5,-8.7,length.out=100),seq(-11.3,-8.3,length.out=100),type="l",col="red",xlim=c(-12.5,-8.7),ylim=c(-11.5,-8.5))
>>> par(new=T)
>>> plot(seq(-12.5,-8.7,length.out=100),seq(-11.7,-8.7,length.out=100),type="l",col="red",xlim=c(-12.5,-8.7),ylim=c(-11.5,-8.5))
>>> par(new=T)
>>> polygon(c(seq(-12.5,-8.7,length.out=100),
>>> rev(seq(-12.5,-8.7,length.out=100))), c(seq(-11.3,-8.3,length.out=100),
>>>
>>> rev(seq(-11.7,-8.7,length.out=100))),
>>> col = alpha("red",0.4), border = NA)
>>> par(new=T)
>>> draw.circle(-12.85,-10.9,0.85,nv=1000,border=NULL,col="yellow",lty=1,lwd=1)
>>> dev.off()
>>>
>
> Agree that the coding question remains unclear, so not using the offered example but responding to the natural language query. The `polygon` function has 'density' and 'angle' argument that with 'col' and 'lwd' can make slanted fill lines. This is a modification of hte first example on `?polygon`?
>
> x <- c(1:9, 8:1)
> y <- c(1, 2*(5:3), 2, -1, 17, 9, 8, 2:9)
> op <- par(mfcol = c(3, 1))
> for(xpd in c(FALSE, TRUE, NA)) {
> plot(1:10, main = paste("xpd =", xpd))
> box("figure", col = "pink", lwd = 3)
> polygon(x, y, xpd = xpd, col = "orange", density=3, angle=45, lwd = 5, border = "red")
> }
>
> The polygon function is _not_ in pkg::plotrix.
>
>
>
>>> It looks a bit ugly since they are not real data, but it is the
>>> simplest
>>> MWE example that I found.
>>>
>>>
>>> Thanks, best
>>>
>>>
>>> Jean-Philippe
>>
>> ______________________________________________
>> 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.
>
> David Winsemius
> Alameda, CA, USA
>
> ______________________________________________
> 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.
David Winsemius
Alameda, CA, USA
More information about the R-help
mailing list