I wytworzone postać, która łączy ggplot i zasadowe grafiki:aby płyty z tych samych marginesów podczas łączenia ggplot i zasadowe grafiki
t <- c(1:(24*14))
P <- 24
A <- 10
y <- A*sin(2*pi*t/P)+20
#*****************************************************************************
par(mfrow = c(2,1))
plot(y,type = "l",xlab = "Time (hours)",ylab = "Amplitude")
aa <- par("mai")
plot.new()
require(gridBase)
vps <- baseViewports()
pushViewport(vps$figure)
pushViewport(plotViewport(margins = aa)) ## I use 'aa' to set the margins
#*******************************************************************************
require(ggplot2)
acz <- acf(y, plot = FALSE)
acd <- data.frame(Lag = acz$lag, ACF = acz$acf)
p <- ggplot(acd, aes(Lag, ACF)) + geom_area(fill = "grey") +
geom_hline(yintercept = c(0.05, -0.05), linetype = "dashed") +
theme_bw()
grid.draw(ggplotGrob(p)) ## draw the figure
używać polecenia plotViewport i określone wymiary panelu zgodnie z wymiarami pierwszy panel, uzyskany przez par ("mai"). Załączona figura pokazuje wynik. Jednak wymiary obu paneli nie są zgodne, tzn. Drugi panel wydaje się być nieco szerszy niż pierwszy. Jak mogę rozwiązać ten bez konieczności ręcznego ustawiania marginesów z
pushViewport(plotViewport(c(4,1.2,0,1.2)))
To jest wystarczająco trudne przy użyciu tylko jednego systemu graficznego, a co dopiero dwóch. Był kiedyś pakiet 'ggextra' z funkcją' align.plots', ale został on wycofany. Zobacz https://groups.google.com/forum/?fromgroups=#!topic/ggplot2-dev/4dKg-qA7eZE – Andrie