You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整R语言中饼图的尺寸以解决图形变形问题?

解决饼图变形问题的几种方法

你的饼图变形是因为默认绘图区域为矩形,而饼图需要正方形画布才能保持圆形形态。以下是几种可行的调整方案:

方法1:强制绘图区域为正方形

在设置布局时添加pty = "s"参数,强制每个子图的绘图区域为正方形:

x1 <- c(90,7,3)
x2 <- c(70,18,12) 
x3 <- c(17,4,30,17,30) 
label1 <- c('Physically 90%','Spoke 7%','Never 3%')
label2 <- c('Abrupt Stop 70%','Go Around 18%','Stops Far \nAway 12%')
label3 <- c('None 17','Robot-Robot 4%','Robot-\nHuman 30%','Robot-\nObject 17%','Robot-\nSurface 30%')
# 设置2x2布局,同时强制每个子图为正方形
par(mfrow = c(2,2), pty = "s") 
pie(x1, label1,main="Instances Where Robot Has Been Stuck", col=rainbow(length(x1)))
pie(x2, label2,main="How Robot Avoids Objects", col=rainbow(length(x2)))
pie(x3, label3,main="Collision Types", col=rainbow(length(x3)))

方法2:自定义布局并指定宽高比

如果需要更灵活的布局控制,使用layout()函数定义单元格宽高比,确保饼图所在单元格为正方形:

# 定义2行2列布局,第4个位置留空,所有单元格宽高比为1:1
layout(matrix(c(1,2,3,0), nrow=2, ncol=2), widths=c(1,1), heights=c(1,1))
par(pty = "s")
pie(x1, label1,main="Instances Where Robot Has Been Stuck", col=rainbow(length(x1)))
pie(x2, label2,main="How Robot Avoids Objects", col=rainbow(length(x2)))
pie(x3, label3,main="Collision Types", col=rainbow(length(x3)))

方法3:调整导出图片的尺寸

如果需要导出饼图(如PNG、PDF格式),直接指定宽高相等的尺寸,从根源避免拉伸:

# 导出为800x800的正方形PNG图片
png("pie_charts.png", width = 800, height = 800)
par(mfrow = c(2,2), pty = "s")
pie(x1, label1,main="Instances Where Robot Has Been Stuck", col=rainbow(length(x1)))
pie(x2, label2,main="How Robot Avoids Objects", col=rainbow(length(x2)))
pie(x3, label3,main="Collision Types", col=rainbow(length(x3)))
dev.off()

额外提示:如果标签过长导致重叠,可以添加cex参数缩小标签字号,例如pie(x3, label3, main="Collision Types", col=rainbow(length(x3)), cex=0.8)

内容的提问来源于stack exchange,提问作者Ayan Robinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:33:18