如何绘制多个直方图而不在R中重叠

Eka*_*Eka 2 plot r

你可以告诉我,如果没有安装额外的库,有没有办法在R中动态绘制多个直方图,而不需要重叠.动态地绘制直方图,并改变列数.下面的代码只有4列,但可以在2到20列之间进行更改.

示例情节

在此输入图像描述

我的代码

set.seed(3)
Ex <- xts(1:100, Sys.Date()+1:100)
df = data.frame(Ex,matrix(rnorm(100*4,mean=123,sd=3), nrow=100))
df<-df[,-1]

for(i in names(df)){
dfh<-hist(df[[i]], plot=FALSE)
}
plot(dfh,main="Histogram",xlab="x",col="green",label=TRUE)
Run Code Online (Sandbox Code Playgroud)

这只绘制了最后一个直方图

com*_*iro 7

如果要在同一屏幕中有多个绘图,可以使用该命令

par(mfrow = c(2,1))
Run Code Online (Sandbox Code Playgroud)

其中c(2,1)表示您希望拥有2行1列图表,并将图表并排放置.如果你输入c(1,3),你会告诉R将你的图表分为1行和3列,依此类推.

然后一个接一个地绘制你的图表,他们将填补相应的空间.

编辑:如果你想自动计算par函数的行和列,你可以创建一个这样的函数(或更精致的东西,并将其传递给par)

dimension = function(df){
kk = dim(df)[2];

x = round(sqrt(kk),0);
y = ceiling(kk/x);

return(c(x,y))
}
Run Code Online (Sandbox Code Playgroud)

成为你的代码

set.seed(3)
Ex <- xts(1:100, Sys.Date()+1:100)
df = data.frame(Ex,matrix(rnorm(100*4,mean=123,sd=3), nrow=100))
df<-df[,-1]

par(mfrow = dimension(df))

for(i in names(df)){
    hist(df[[i]] ,main="Histogram",xlab="x",col="green",label=TRUE,plot = TRUE)
}
Run Code Online (Sandbox Code Playgroud)