在R中修改饼图轮廓线的宽度--pie()函数中lwd参数的等效物是什么?

5

我正在使用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=不会增加线条的粗细。

有人有任何线索吗?


3
你有没有读完?pie的所有内容?最重要的是,“饼图是一种非常糟糕的信息展示方式。”请听从这个建议!!不过,需要明确的是,图形参数只会影响主标题和标签。 - alexwhan
我听到你的声音了,alexwhan... 饼图是按要求制作的。 我必须在内部客户中进行选择和斗争。 :) - Chris
2个回答

9

pie 中调用的 polygonlines 函数没有传递 ...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)
....

您可以通过在调用pie函数之前和之外设置par(lwd = 2)(或其他)来避免这种情况。
例如:
# 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)

8

目前,在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 函数。首先输入 pie,复制代码并进行一些更改:

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接