我正在使用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=不会像在其他基础绘图中那样增加线条粗细.
有人有任何线索吗?
对内部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)
....
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)
目前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)