修改R中饼图中轮廓的宽度 - pie()的lwd参数等价于什么?

时间:2013-03-05 23:46:45

标签: r

我正在使用base R绘图函数来生成饼图,我想更改每个饼图段轮廓的线条粗细。 ?pie似乎表示我可以添加可选图形参数,但添加lwd=似乎不起作用。任何人都有任何关于我如何能够做到这一点的线索。我还不熟练在ggplot中制作饼图,并希望坚持使用base R绘图(如果可能的话)。

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) 

注意lwd=不会像在其他基础绘图中那样增加线条粗细。

任何人都有线索吗?

2 个答案:

答案 0 :(得分:7)

polygonlinespie的来电未通过...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)
....

您可以在拨打par(lwd = 2)

之前和之前设置pie(或其他)来解决此问题

# 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)

答案 1 :(得分:6)

目前,执行实际绘图的pie内的函数是polygon,以下是它的调用方式:

polygon(c(P$x, 0), c(P$y, 0), density = density[i], angle = angle[i], 
        border = border[i], col = col[i], lty = lty[i])

请注意,没有lwd参数,更严重的是没有...参数来接受可能没有硬编码的参数。

创建一个新的pie2函数。首先输入馅饼,复制代码并进行一些更改:

pie2 <- 
   function (x, labels = names(x), edges = 200, radius = 0.8, clockwise = FALSE, 
             init.angle = if (clockwise) 90 else 0, density = NULL, angle = 45, 
             col = NULL, border = NULL, lty = NULL, main = NULL,  lwd=1,...) 

    {
       ................
     polygon(c(P$x, 0), c(P$y, 0), density = density[i], angle = angle[i], 
           border = border[i], col = col[i], lty = lty[i], lwd=lwd )
       .................

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