The plots in plot_model
are made by getting a model's predictions and standard errors across the range of the variable in question, while holding all other covariates at their mean value. In your example, that means we can effectively recreate your two plots in vanilla ggplot by doing:
dat = mtcars
fit = lm(mpg ~ disp + hp + drat + wt + qsec, data = dat)
hp_preds <- predict(fit, newdata = data.frame(hp = 52:335,
disp = mean(mtcars$disp),
drat = mean(mtcars$drat),
wt = mean(mtcars$wt),
qsec = mean(mtcars$qsec)),
se = TRUE)
ggplot(cbind(hp = 52:335, as.data.frame(hp_preds[1:2])), aes(hp, fit)) +
geom_ribbon(aes(ymin = fit - 1.96*se.fit, ymax = fit + 1.96*se.fit),
alpha = 0.15) +
geom_line(size = 1) +
ggtitle('Predicted values of mpg')

And
disp_preds<- predict(fit, newdata = data.frame(hp = mean(mtcars$hp),
disp = 71:472,
drat = mean(mtcars$drat),
wt = mean(mtcars$wt),
qsec = mean(mtcars$qsec)),
se = TRUE)
ggplot(cbind(disp = 71:472, as.data.frame(disp_preds[1:2])),
aes(disp, fit)) +
geom_ribbon(aes(ymin = fit - 1.96*se.fit, ymax = fit + 1.96*se.fit),
alpha = 0.15) +
geom_line(size = 1) +
scale_y_continuous(breaks = c(15, 20, 25), limits = c(15, 27.8)) +
ggtitle('Predicted values of mpg')

This shows that we can simply overlay the two plots, as long as the x axis is specific about the fact that the units are different for the variables:
ggplot(cbind(disp = 71:472, as.data.frame(disp_preds[1:2])), aes(disp, fit)) +
geom_ribbon(aes(ymin = fit - 1.96*se.fit, ymax = fit + 1.96*se.fit,
fill = 'disp'), alpha = 0.15) +
geom_line(size = 1, aes(color = 'disp')) +
geom_ribbon(data = cbind(hp = 52:335, as.data.frame(hp_preds[1:2])),
aes(x = hp, ymin = fit - 1.96*se.fit, ymax = fit + 1.96*se.fit,
fill = 'hp'), alpha = 0.15) +
geom_line(data = cbind(hp = 52:335, as.data.frame(hp_preds[1:2])),
size = 1, aes(x = hp, color = 'hp')) +
labs(fill = 'Predictor', color = 'Predictor',
x = 'disp or hp value', y = 'mpg') +
ggtitle('Predicted values of mpg')
