如何在R语言中调整绘图尺寸?解决2x2布局饼图变形问题
解决R中2x2饼图阵列变形的问题
饼图变形的核心原因是它需要正方形的绘图区域才能保证圆形显示,你用par(mfrow = c(2,2))布局时,默认的绘图窗口宽高比或子图分配空间不是正方形,导致图形被拉伸。下面是几种可行的调整方案:
方法1:指定绘图设备的宽高(推荐)
在绘图前打开一个宽高相等的绘图设备,确保每个子图能分配到接近正方形的空间。如果是保存为图片,直接设置宽高参数;如果是在RStudio中查看,可手动调整窗口为正方形,或用dev.new()打开指定尺寸的窗口:
# 示例:保存为宽高8英寸的png图片 png("pie_grid.png", width = 8, height = 8, units = "in", res = 300) par(mfrow = c(2,2)) 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))) plot.new() # 补全2x2布局的空白子图(可选) dev.off() # 关闭绘图设备
方法2:调整子图尺寸与边距
通过par()的pin参数指定每个子图的宽高(单位英寸),同时用mai参数调整边距,避免标题、标签挤压导致的变形:
par(mfrow = c(2,2), pin = c(2,2), mai = c(0.5, 0.5, 0.8, 0.5)) # mai参数顺序:下、左、上、右,单位为英寸 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))) plot.new()
方法3:用ggplot2+patchwork实现可控布局
如果习惯使用ggplot2,结合patchwork包可以更灵活地控制布局,且天然避免饼图变形问题:
library(ggplot2) library(patchwork) # 将数据转换为ggplot兼容的数据框格式 df1 <- data.frame(category = label1, value = x1) df2 <- data.frame(category = label2, value = x2) df3 <- data.frame(category = label3, value = x3) # 绘制单个饼图 p1 <- ggplot(df1, aes(x="", y=value, fill=category)) + geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_void() + labs(title="Instances Where Robot Has Been Stuck") + scale_fill_rainbow() p2 <- ggplot(df2, aes(x="", y=value, fill=category)) + geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_void() + labs(title="How Robot Avoids Objects") + scale_fill_rainbow() p3 <- ggplot(df3, aes(x="", y=value, fill=category)) + geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_void() + labs(title="Collision Types") + scale_fill_rainbow() # 组合为2x2布局,补全空白子图 p_empty <- ggplot() + theme_void() (p1 + p2) / (p3 + p_empty)
内容的提问来源于stack exchange,提问作者Ayan Robinson
相关产品推荐
相关产品推荐

