如何调整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
相关产品推荐
相关产品推荐

