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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:23:27