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

R语言新增直方图无法显示在已有图表下方的问题求助

解决方法:将新增直方图显示在已有图表下方

问题核心原因

你之前的代码有两个关键错误:

  1. 图形布局参数par(mfrow=c(5,1))必须放在所有绘图代码之前,否则R不会应用这个布局设置。
  2. 新增直方图时使用了add=TRUE,这个参数是用来在同一个绘图区域叠加内容的,而非新建子图。

修正后的完整代码

# 先设置多图布局:5行1列,调整边距让排版更合理
par(mfrow=c(5,1), mar = c(2,4,2,1), oma = c(3,0,0,0))

# ---------------------- 第一幅图:原始叠加直方图 ----------------------
x <- rnorm(1000,1,1)
x1 <- rnorm(1000,100,1)

y <- hist(x, plot=FALSE, breaks=20)
y1 <- hist(x1, plot=FALSE, breaks=20)

mean_x <- mean(x)
mean_x1 <- mean(x1)

# 初始化绘图区域
plot(0,0, 
     ylim=range(c(y$counts, y1$counts)), 
     xlim=range(c(y$breaks, y1$breaks)), 
     xlab="", ylab="counts", type="n", main="原始叠加直方图")

corners <- par('usr') 

x_left <- corners[1]
x_right <- quantile(x,0.95) 

x1_left <- x_right
x1_right <- quantile(x1,0.05) 

rect(xleft=x_left, xright=x_right, ybottom=corners[3], ytop=corners[4],
     col='lightblue', density=100)
rect(xleft=x1_left, xright=x1_right, ybottom=corners[3], ytop=corners[4],
     col='pink', density=100)

plot(y, col='lightgray', add=TRUE)
plot(y1, col='gray48', add=TRUE)

abline(v=mean_x, col='forestgreen', lwd=3)
abline(v=mean_x1, col='forestgreen', lwd=3)

abline(v=x_right, col='steelblue', lwd=3)
abline(v=x1_right, col='firebrick', lwd=3)

# ---------------------- 第二幅图:C=10的直方图 ----------------------
V <- function(C, H, n) {
  1 + (C / H)^n  # 简化原代码的1/1为1
}

V_10 <- V(10,1,1)
x3 <- rnorm(1000, V_10, 1)
# 直接绘制,无需add=TRUE,自动进入下一个子图区域
hist(x3, breaks=20, col='gray48', main="C=10的直方图", xlab="", ylab="counts")
mean_x3 <- mean(x3)
abline(v=mean_x3, col='forestgreen', lwd=3)

# ---------------------- 第三幅图:C=50的直方图 ----------------------
V_50 <- V(50,1,1)
x4 <- rnorm(1000, V_50, 1)
hist(x4, breaks=20, col='gray48', main="C=50的直方图", xlab="", ylab="counts")
mean_x4 <- mean(x4)
abline(v=mean_x4, col='forestgreen', lwd=3)

# ---------------------- 可选:补充剩余子图(如果需要5行) ----------------------
plot(0,0, type="n", axes=FALSE, xlab="", ylab="", main="")
plot(0,0, type="n", axes=FALSE, xlab="", ylab="", main="")

# 为所有子图添加统一的底部x轴标签
mtext("x", side=1, outer=TRUE, line=1)

关键调整说明

  • 布局设置提前:par(mfrow=c(5,1))放在代码最开头,R会按从上到下的顺序依次填充每个子图区域。
  • 移除add=TRUE:新增直方图直接调用hist(),R会自动切换到下一个空白子图区域绘制。
  • 边距优化:调整mar(子图内边距)和oma(全局外边距),避免标签重叠;用mtext添加统一的x轴标签,提升可读性。
  • 简化函数:原函数1/1可简化为1,不影响结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:10:18