在同一个图上绘制 9 个图的最佳方法?

Best way to plot 9 graphs on the same plot?

正在尝试制作 Glass 数据集中所有预测变量值的直方图。我最初使用 par(mfrow=c(3,3)) 将所有 9 个预测变量绘制在同一个 window 上,但出现了边距太大的错误。没关系。写 hist(Glass$X) 九次无论如何都是低效的。

所以我试着一次把它们全部画出来。我对数据进行了子集化,以便只保留数字列,但收到一条错误消息,指出它们不是数字列。我已经验证所有列都是数字。我做错了什么?

library(mlbench)
data(Glass)
library(lattice)

par(mfrow=c(3,3))
hist(Glass$RI)

> Error in plot.new() : figure margins too large

Glass2=subset(Glass[1:9])
hist(Glass2)

> Error in hist.default(Glass2) : 'x' must be numeric

将数据子集放入新数据框 X。不要将 X$x 键入九次,而是使用 for 循环。确保你的情节 window 真的很大,否则你会得到一个边距太小的错误。

X <- Glass[,1:9]
par(mfrow = c(3, 3))
for (i in 1:ncol(X)) {
  hist(X[ ,i], xlab = names(X[i]), main = paste(names(X[i]), "Histogram"), col="steelblue")  
}

这里有一个 tidyverse 替代方案。

library(tidyr)
library(ggplot2)
library(mlbench)

data(Glass)

Glass %>% 
  pivot_longer(-Type) %>% 
  ggplot(aes(value)) + 
  geom_histogram() + 
  facet_wrap(~name, 
             ncol = 3, 
             scales = "free")

结果: