在同一个图上绘制 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")
结果:
正在尝试制作 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")
结果: