tôi đã tạo ra một nhân vật kết hợp ggplot và cơ sở đồ họa:tạo ra những tấm với cùng một lề khi kết hợp ggplot và cơ sở đồ họa
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
tôi sử dụng lệnh plotViewport và thiết lập kích thước của bảng điều khiển theo kích thước của bảng đầu tiên, thu được bằng mệnh giá ("mai"). Con số kèm theo cho thấy kết quả. Tuy nhiên, kích thước của cả hai bảng không khớp nhau, tức là bảng điều khiển thứ hai có vẻ rộng hơn một chút so với bảng đầu tiên. Làm thế nào tôi có thể khắc phục điều này mà không cần phải tự đặt bên lề với
pushViewport(plotViewport(c(4,1.2,0,1.2)))
Đây là khó khăn đủ chỉ sử dụng một hệ thống đồ họa duy nhất, chứ chưa nói hai. Đã từng có một gói 'ggextra' với một hàm' align.plots' nhưng điều này đã không được chấp nhận. Xem https://groups.google.com/forum/?fromgroups=#!topic/ggplot2-dev/4dKg-qA7eZE – Andrie