如何基于每列创建具有不同构面的图,但基于行名仍然具有相同的x
值。
假设我有regsubsets()
的摘要,但是由于它返回了一个列表,因此我必须首先将其作为数据帧(无论如何,我可以将ggplot2与list一起使用?)。
set.seed(1)
X = rnorm(100)
e = rnorm(100)
Y = 8 + 7*X + 2.5*X^2 - 9*X^3 + e
regfit.full = regsubsets(Y~poly(X,10,raw=T), data=data.all, nvmax=10)
(reg.summary = summary(regfit.full))
df = data.frame(reg.summary$cp, reg.summary$bic, reg.summary$adjr2)
> names(df)
[1] "reg.summary.cp" "reg.summary.bic" "reg.summary.adjr2"
> dim(df)
[1] 10 3
现在的问题是,如何为每个特征(即reg.summary.cp
,reg.summary.bic
,reg.summary.adjr2
)创建一个小平面,这些小平面将成为y轴上的值以及x轴将是行号。
答案 0 :(得分:2)
可以通过添加行号并使用reshape2
熔化数据帧来完成:
library(reshape2)
library(ggplot2)
data.all = data.frame()
set.seed(1)
X = rnorm(100)
e = rnorm(100)
Y = 8 + 7 * X + 2.5 * X ^ 2 - 9 * X ^ 3 + e
regfit.full = regsubsets(Y ~ poly(X, 10, raw = T), data = data.all, nvmax = 10)
(reg.summary = summary(regfit.full))
df = data.frame(reg.summary$cp, reg.summary$bic, reg.summary$adjr2)
df$rownum <- 1:NROW(df)
molten_df <- melt(df, id.vars = "rownum")
ggplot(data = molten_df, aes(x = rownum, y = value)) +
geom_point() +
facet_wrap( ~ variable)
编辑:也许可以通过添加scales = "free_y"
使y轴彼此独立
所以:
ggplot(data = molten_df, aes(x = rownum, y = value)) +
geom_point() +
facet_wrap( ~ variable, scales = "free_y")
EDIT2:一种在不熔化df
的情况下进行绘图的方法:
grid.arrange(
ncol = 3,
ggplot(data = df) +
geom_point(aes(x = rownum, y = reg.summary.cp)),
ggplot(data = df) +
geom_point(aes(x = rownum, y = reg.summary.bic)),
ggplot(data = df) +
geom_point(aes(x = rownum, y = reg.summary.adjr2))
)