从ggplot2中的单个数据帧创建构面

时间:2019-03-07 13:24:24

标签: r ggplot2

如何基于每列创建具有不同构面的图,但基于行名仍然具有相同的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.cpreg.summary.bicreg.summary.adjr2)创建一个小平面,这些小平面将成为y轴上的值以及x轴将是行号。

1 个答案:

答案 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)

enter image description here

编辑:也许可以通过添加scales = "free_y"使y轴彼此独立 所以:

ggplot(data = molten_df, aes(x = rownum, y = value)) +
  geom_point() +
  facet_wrap( ~ variable, scales = "free_y")

enter image description here

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))
)