Ecco le trame corrispondenti agli esempi ggplot di Prasad (1) fatto utilizzando xyplot
in lattice. (2) Dopodiché mostriamo come farlo usando xyplot.zoo
dal pacchetto zoo e poi (3) mostriamo come eseguirne ognuna ancora usando lo plot.zoo
che usa le classiche funzionalità grafiche del pacchetto zoo.
In ognuno di questi casi viene anche visualizzato un quarto stile basato su xblocks
.
primo luogo permette di ripetere l'installazione di Prasad:
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))
Ora proviamo utilizzando lattice
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()
Questo dà questi 4 piazzole:
e ora lascia ripetere questo utilizzando usando lo zoo in congiunzione con il reticolo e l'altro p 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()
Ecco l'output:
Una terza serie di modi è quello di utilizzare la grafica in stile classico con zoo dove usiamo la stessa z
, zz
e pal
calcolato sopra:
e qui è l'uscita
Try ggsave(), come in ggsave ("/ tmp/immagine.png", width = 5, height = 4, dpi = 72) - Io lo uso sempre sul mio Mac invece di salvare come PDF, convertire, caricare, ecc. –
@Jeffrey Ah sì certo, questo è il modo di farlo, grazie per averlo fatto notare! –
@Prasad: è stato rapido e utile, dandomi quello che sto cercando. – jgc