Я генерирую цифры, используя ggplot2
и facet_wrap
, следуя предыдущему вопросу .Ниже приведен рабочий пример, большая часть которого адаптирована из решения, предоставленного @ MrFlick.
require(data.table); require(ggplot2); require(purrr); require(dplyr)
N <- 1000 # Generate some data
DT <- NULL
models <- list() # list of fitted models. For simplicity i am using lm in this example
for(i in 1:6){
x <- rnorm(N)
y <- i*x + rnorm(N)
z <- rep(i,N)
i.DT <- data.table(cbind(x=x,y=y,z=z))
models[[i]] <- lm(y~x,i.DT)
DT <- rbind(DT,i.DT)
}
xrng <- 1.5*range(models[[length(models)]]$model$x)
yrng <- 1.5*range(models[[length(models)]]$model$y)
lines <- map_dfr(models, function(m) {
t <- data.frame(x=xrng, y=predict(m, data.frame(x=xrng)))
txrng <- xrng
tyrng <-t$y
while(!between(tyrng[1],yrng[1],yrng[2]) |
!between(tyrng[2],yrng[1],yrng[2])){
txrng <- txrng*0.9
t <- data.frame(x=txrng, y=predict(m, data.frame(x=txrng)))
tyrng <-t$y
}
return(t)
}, .id="z") # map lines from regression models
hlines <- map_dfr(models, function(m) {
t <- data.frame(x=xrng,y=rep(coef(m)[1],2))
return(t)
}, .id="z")
Slopes <- map_dfr(models, function(m) {
t <- data.frame(Intercept=coef(m)[1],Slope=coef(m)[2])
t$text <- paste0("Slope=",round(t$Slope,3))
return(t)
}, .id="z") # map text
my.plot <- ggplot(DT, aes(x=x, y=y,color=abs(y))) +
geom_point() + theme(legend.title=element_blank(),
legend.position=c(-0.14,0.85),
legend.text=element_text(size=10),
aspect.ratio=1) +
xlim(xrng) + ylim(yrng) +
facet_wrap(~z,nrow=2,ncol=3) + geom_line(color="red", data=lines) +
geom_line(color="black", data=hlines,linetype="dashed") +
geom_text(data=Slopes,aes(x=2, y=-20,label=text),
inherit.aes=FALSE)
my.plot
Я новичок в ggplot2
и facet_wrap
, и яЗаинтересованы в понимании того, как указать дополнительные детали и настроить их.
- Можно ли контролировать положение текста легенды?Могу ли я переместить текст с правой стороны легенды влево?
- Как устанавливаются поля фасета?Кажется, что у каждого графика нет полей, но на панели есть левое поле и нижнее поле для заголовков осей.Могу ли я установить эти поля панели вручную, чтобы добавить правое поле?
- Непонятно, как настроить метку "Slope =".Я могу переместить его, но я не могу изменить его цвет?