Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Modifying width of outline in a pie chart in R--what is the equivalent of lwd parameter for pie()?

Tags:

r

I'm using base R plotting functions to produce a pie chart and I want to change the line thickness of the outlines of each pie segment. ?pie seems to indicate that I can add optional graphic parameters, but adding lwd= does not appear to work. Anyone have any clues as to how I might be able to do this. I'm not yet proficient in producing pie charts in ggplot, and would like to stick with base R plotting (if possible).

library(RColorBrewer)

x1 <- data.frame(V1 = c(200, 100)) ##  generate data

row.names(x1) <- c("A", "B")

x1$pct <- round((x1$V1/sum(x1$V1))*100, 1)

lbls1 <- paste(row.names(x1), "-(",x1$pct, '%)', sep='') ## add some informative stuff

pie(x1$V1, labels=lbls1, col=tail(brewer.pal(3, 'PuBu'), n=2), 
           main=paste('My 3.1415'), cex=1.1, lwd= 3) 

Notice lwd= does not increase line thickness like it would in other base plotting.

Anyone have any clues?

like image 347
Chris Avatar asked Dec 09 '22 17:12

Chris


1 Answers

The call to polygon and lines within pie does not pass ... or lwd

...
polygon(c(P$x, 0), c(P$y, 0), density = density[i], angle = angle[i], 
        border = border[i], col = col[i], lty = lty[i])
    P <- t2xy(mean(x[i + 0:1]))
    lab <- as.character(labels[i])
    if (!is.na(lab) && nzchar(lab)) {
        lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y)
....

You can get around this by setting par(lwd = 2) (or whatever) outside and prior to your call to pie

i.e.

# save original settings
opar <- par(no.readonly = TRUE)
par(lwd = 2)
pie(x1$V1, labels=lbls1, col=tail(brewer.pal(3, 'PuBu'), n=2), 
  main=paste('My 3.1415'), cex=1.1)

enter image description here

par(lwd = 3)

enter image description here

# reset to original
par(opar)
like image 198
mnel Avatar answered Dec 11 '22 08:12

mnel