R lattice и latticeExtra: как уменьшить поле белого между осью Y и линиями данных - PullRequest
0 голосов
/ 27 августа 2018

Я сделал графику, используя команду doubleYscale из latticeExtra. Я хотел бы уменьшить или даже полностью удалить пустое пространство между вертикальными осями и цветной областью - я хочу, чтобы строки данных начинались и заканчивались непосредственно рядом с осями. Мой скрипт такой:

# -----------------------------------------------------------------------------#

library("xts")           ## se usa para manipular y graficar series temporales
library("lubridate")     ## se usa para manipular fechas
library("lattice")       ## se usa para graficar las series
library("latticeExtra")  ## se usa para pintar áreas en los gráficos
# -----------------------------------------------------------------------------#

fechas <- seq(as.Date('2017-05-22'), length.out = 365, by = 'days')

serie.0 <- xts::xts(x = runif(n = length(fechas)), order.by = fechas)
serie.5 <- xts::xts(x = runif(n = length(fechas)), order.by = fechas)

titulo <- list(label = 'Título', col = 'black', cex = 1.2)

umbrales.y <- c(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1, 1.1)
etiq.der <- c("PMP", "10%AU", "30%AU", "50%AU", "70%AU", "90%AU", "CC", "")

marcas.x <- fechas[which(day(fechas) == 1)]
labels.x <- substr(as.character(month(marcas.x, label = T)), 1, 3)
scales.x <- list(at = marcas.x + 15, tck = 0, labels = labels.x, cex = 1.1, rot = 0, col = "black")
scales.y     <- list(at = umbrales.y, col = "black", rot = 0, labels = c())
scales.y.der <- list(at = umbrales.y, rot = 0, col = "black", labels = etiq.der)

plot.0 <- lattice::xyplot(serie.0 ~ fechas, panel = function(x, y) {

  panel.xyarea(x, y = umbrales.y[8], col = "cadetblue",
               border = NULL)
  panel.xyarea(x, y = umbrales.y[7], col = "darkgreen",
               border = NULL)
  panel.xyarea(x, y = umbrales.y[6], col = "green4",
               border = NULL)
  panel.xyarea(x, y = umbrales.y[5], col = "chartreuse3",
               border = NULL)
  panel.xyarea(x, y = umbrales.y[4], col = "darkolivegreen1",
               border = NULL)
  panel.xyarea(x, y = umbrales.y[3], col = "lightgoldenrod1",
               border = NULL)
  panel.xyarea(x, y = umbrales.y[2], col = "chocolate3",
               border = NULL)
  panel.xyarea(x, y = umbrales.y[1], col = "brown4",
               border = NULL)

  panel.abline(v = marcas.x, col = "darkgrey",
               lwd = 0.05)
  panel.abline(h = umbrales.y[4], col = "black",
               lwd = 2)
  panel.xyplot(x, y, type = "l", col = "darkblue",
               lwd = 2)},

  xlab = NULL,
  ylab = list('Almacenaje', cex = 1, col = 'black'),
  main = titulo,  
  ylim = c(- 0.1, 1),
  xlim = range(fechas),
  scales = list(relation = "free", col = "black", x = scales.x, y = scales.y),
  key = list(text = list(c("Último año", "Decil 5")),
             lines = list(col = c("darkblue", "black"),
                          lty = c(1,2), lwd = c(2,1.9))),
  par.settings = list(simpleTheme(col = 1),
                      layout.widths = list(ylab.axis.padding = -3)))

plot.1 <- lattice::xyplot(serie.5 ~ fechas, type = "l",
                          col = "black", lwd = 1.9, lty = 2,
                          ylim = c(- 0.1, 1),
                          xlim = range(fechas),
                          scales = list(relation = "free", x = scales.x, y = scales.y.der))

#png(filename = 'C:/Eugenia/graf.png', width = 600, height = 480)
print(latticeExtra::doubleYScale(plot.0, plot.1, style1 = 0, style2 = 0))
#dev.off()

Результат: My graph

Я пытался изменить параметры layout.widths, но не нашел пути. Заранее благодарю за любую помощь!

...