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

Chr*_*ris 4 r

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

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) 
Run Code Online (Sandbox Code Playgroud)

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

有人有任何线索吗?

mne*_*nel 8

对内部polygonlines内部的呼叫pie未通过...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)
....
Run Code Online (Sandbox Code Playgroud)

您可以通过在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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

par(lwd = 3)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

# reset to original
par(opar)
Run Code Online (Sandbox Code Playgroud)


42-*_*42- 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])
Run Code Online (Sandbox Code Playgroud)

请注意,没有任何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)
Run Code Online (Sandbox Code Playgroud)