4

我正在使用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) 

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

有人有任何线索吗?

4

2 回答 2

8

polygon对和lines内部的调用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)
....

您可以通过在par(lwd = 2)外部和之前设置(或其他)来解决此问题pie

IE

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

在此处输入图像描述

par(lwd = 3)

在此处输入图像描述

# reset to original
par(opar)
于 2013-03-05T23:54:00.303 回答
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)
于 2013-03-05T23:53:18.107 回答