Sau đây là các lô tương ứng với ví dụ ggplot Prasad của (1) sử dụng xong xyplot
trong lưới. (2) Sau đó, chúng tôi trình bày cách thực hiện bằng cách sử dụng xyplot.zoo
từ gói sở thú và sau đó (3) chúng tôi hiển thị cách thực hiện lại một lần nữa bằng cách sử dụng plot.zoo
sử dụng các tiện ích đồ họa cổ điển của gói sở thú.
Trong mỗi trường hợp này, chúng tôi cũng hiển thị kiểu thứ 4 dựa trên xblocks
.
Đầu tiên cho phép lặp lại thiết lập Prasad của:
dts <- as.Date("20050101", '%Y%m%d') + seq(0,1000,15)
A <- data.frame(Dates = dts, Gas = 4000 + cumsum(abs(rnorm(length(dts), 100, 30))))
A <- transform(A,
Year = format(Dates, '%Y'),
DayOfYear = as.numeric(format(Dates, '%j')),
GasDiff = c(diff(Gas),NA))
Bây giờ cho phép thử sử dụng mạng
library(lattice) # xyplot
library(latticeExtra) # layer_, panel.xblocks
library(gridExtra) # grid.arrange
library(RColorBrewer) # brewer.pal
png("png1.png")
p1 <- xyplot(GasDiff ~ Dates, group = Year, A, type = "l",
par.settings = list(superpose.line = list(col = 1:nlevels(A$Year))),
auto.key = list(lines = TRUE, points = FALSE))
p2 <- xyplot(GasDiff ~ DayOfYear | Year, A, type = "l", layout = c(1, 3))
p3 <- xyplot(GasDiff ~ DayOfYear, A, group = Year, type = "l",
auto.key = list(lines = TRUE, points = FALSE))
# and here is another style:
myPalette <- brewer.pal(nlevels(A$Year), "Set3")
p4 <- xyplot(GasDiff ~ Dates, A, type = "l", col = 1) +
layer_(panel.xblocks(A$Dates, myPalette[A$Year]))
grid.arrange(nrow = 2, p1, p2, p3, p4)
dev.off()
Điều này cho phép những 4 lô:
và bây giờ cho phép lặp lại điều này sử dụng sử dụng sở thú kết hợp với mạng và các p khác ackages:
png("png2.png")
library(zoo)
library(lattice)
library(latticeExtra) # layer_, panel.xblocks
library(gridExtra) # grid.arrange
library(RColorBrewer) # brewer.pal
z <- with(A, zoo(GasDiff, Dates))
year <- format(time(z), "%Y")
# split years into separate columns and plot
P1 <- xyplot(do.call("merge", split(z, year)), screen = 1, col = 1:3)
# split years into separate columns and use day.of.year as time
day.of.year <- function(x) as.numeric(format(x, "%j"))
zz <- read.zoo(A[c(1, 5, 3)], FUN = day.of.year, split = 3)
colnames(zz) <- unique(year)
P2 <- xyplot(na.approx(zz, na.rm = FALSE))
P3 <- xyplot(na.approx(zz, na.rm = FALSE), screen = 1, col = 1:3, auto.key = TRUE)
pal <- brewer.pal(nlevels(factor(year)), "Set3")
P4 <- xyplot(z, screen = 1) + layer_(panel.xblocks(time(z), pal[factor(year)]))
grid.arrange(nrow = 2, P1, P2, P3, P4)
dev.off()
Đây là kết quả:
Một tập thứ ba cách là sử dụng đồ họa cổ điển với sở thú nơi mà chúng tôi sử dụng cùng một z
, zz
và pal
tính trên:
library(zoo)
library(RColorBrewer) # brewer.pal
png("png3a.png")
plot(do.call("merge", split(z, year)), screen = 1, col = 1:3)
dev.off()
png("png3b.png")
plot(na.approx(zz, na.rm = FALSE))
dev.off()
png("png3c.png")
plot(na.approx(zz, na.rm = FALSE), screen = 1, col = 1:3)
legend("topleft", colnames(zz), lty = 1, col = 1:3, bty = "n")
dev.off()
png("png3d.png")
plot(z, type = "n")
xblocks(time(z), pal[factor(year)])
lines(z)
dev.off()
và đây là đầu ra
Hãy thử ggsave(), như trong ggsave ("/ tmp/image.png", width = 5, height = 4, dpi = 72) - Tôi sử dụng tất cả thời gian trên máy Mac thay vì lưu dưới dạng PDF, chuyển đổi, tải lên, v.v. –
@ Jeffrey Ah có tất nhiên, đó là cách để làm điều đó, cảm ơn vì đã chỉ ra! –
@Prasad - nhanh chóng và hữu ích, mang lại cho tôi những gì tôi đang theo dõi. – jgc