向构面添加点

时间:2019-03-08 01:56:28

标签: r ggplot2 facet

首先是库

library(tidyr)
library(leaps)
library(ggplots2)
library(ggdark)

模型的价值

set.seed(1)
X = rnorm(100)
e = rnorm(100)
Y = 8 + 7*X + 2.5*X^2 - 9*X^3 + e

拟合

data.all = data.frame(Y,X)
regfit.full = regsubsets(Y~poly(X,10,raw=T), data=data.all, nvmax=10)
(reg.summary = summary(regfit.full))

然后我得到每个变量的最小值

(reg.min.cp = which.min(reg.summary$cp))
(reg.min.bic = which.min(reg.summary$bic))
(reg.min.adjr2 = which.min(reg.summary$adjr2))

为绘图创建数据框

df = data.frame(reg.summary$cp, reg.summary$bic, reg.summary$adjr2)
df$rownum = 1:nrow(df)

重塑数据框

molten = df %>% gather(variable, value, reg.summary.cp:reg.summary.adjr2 )

使用刻面绘图

(lp = molten %>% ggplot(data=.) + 
  aes(x=rownum, y=value) + 
  geom_line(col="black") + 
  geom_point(data=molten, aes(xint=reg.min.adjr2, z="reg.summary.adjr2", col="red")) + # this is where I got the wrong plot
  facet_wrap(~variable, scales="free_y")
)

enter image description here

它显示错误。我期望的是geom_point(data=molten, aes(xint=reg.min.adjr2, z="reg.summary.adjr2", col="red"))仅将reg.min.adjr2添加到构面reg.summary.adjr2上,并且仅增加一个点。 如何以这种方式制作?

1 个答案:

答案 0 :(得分:0)

我从这两个SO得到一些想法:

How to add different lines for facets

Add a segment only to one facet using ggplot2

我要做的是首先为cpbicadjr2的最小值创建一个新的数据框。然后将点添加到主图中。

我确保x的值是rownum,而y是最小值。我还向variable添加了一个参数min_plot,以确保将其添加到右侧。

min_plot = data.frame(
  rownum=c(reg.min.cp, reg.min.bic, reg.min.adjr2),
  y = c(reg.summary$cp[reg.min.cp], reg.summary$bic[reg.min.bic], reg.summary$adjr2[reg.min.adjr2]),
  variable=c("reg.summary.cp", "reg.summary.bic", "reg.summary.adjr2"))

(lp = molten %>% ggplot(data=.) 
  + aes(x=rownum, y=value)  
  + geom_line(col="black")  
  + facet_wrap(~variable, scales="free_y")  
  + geom_point(data = min_plot, aes(x=rownum, y=y), col="red")
)