Установка графика с многострочными метками y

Я реализую этот анализ в R: загружаю набор данных, создаю объект зоопарка и строю набор данных.

library(tseries)
library(zoo)

start <- "2011-01-01"
end <- "2014-12-31"

MET <- get.hist.quote("MET", quote="Close", start=start, end=end)
MHK <- get.hist.quote("MHK", quote="Close", start=start, end=end)
MJN <- get.hist.quote("MJN", quote="Close", start=start, end=end)
MKC <- get.hist.quote("MKC", quote="Close", start=start, end=end)
MLM <- get.hist.quote("MLM", quote="Close", start=start, end=end)
MMC <- get.hist.quote("MMC", quote="Close", start=start, end=end)
MMM <- get.hist.quote("MMM", quote="Close", start=start, end=end)
MNK <- get.hist.quote("MNK", quote="Close", start=start, end=end)
MNST <- get.hist.quote("MNST", quote="Close", start=start, end=end)
MO <- get.hist.quote("MO", quote="Close", start=start, end=end)  
MON <- get.hist.quote("MON", quote="Close", start=start, end=end)  
MOS <- get.hist.quote("MOS", quote="Close", start=start, end=end)  
MPC <- get.hist.quote("MPC", quote="Close", start=start, end=end) 
MRK <- get.hist.quote("MRK", quote="Close", start=start, end=end)  
MRO <- get.hist.quote("MRO", quote="Close", start=start, end=end)

Series <- zoo(cbind(MET, MHK, MJN, MKC, MLM, MMC, MMM, MNK, MNST, MO,
                    MON, MOS, MPC, MRK, MRO))
colnames(Series) <- c("MetLife", "Mohawk", "\nMead\nJohnson",
                      "McCormick", "Martin\nMarietta", 
                      "Marsh and\nMcLennan", "3M", "Mallinckrodt",  
                      "Monster\nBeverage", "Altria", "Monsanto", 
                      "The Mosaic\nCompany", "Marathon\nPetroleum",  
                      "Merck", "Marathon Oil")
Series <- na.approx(Series)

plot(Series, main = "", xlab = "")

Чтобы представить более привлекательный график, я ввел команду \n, чтобы разделить имена меток y на 2 строки. Но графический вывод выводит левые метки y за пределы поля.

Пример графика R

Я попытался изменить как mar, так и mai в функции par() без каких-либо изменений в моем выводе. Я думаю, что это может быть связано с нарисованным объектом (объектом зоопарка).


person Francesco Bianchi    schedule 07.04.2017    source источник


Ответы (1)


tidyverse — особенно ggplot упрощает получение разумно выглядящей графики без настройки трехбуквенных аббревиатур до бесконечности:

library(tidyverse)

Series %>%
  as.data.frame %>%
  mutate(date = row.names(.) %>% as.Date) %>%
  gather(ticker, price, -date) %>%
  filter (!is.na(price)) ->
  dl

dl %>%
  ggplot(aes(date, price)) +
  geom_line() +
  facet_wrap(~ticker, strip.position = "left", ncol = 2)

тикеры в ggplot

NB: вы даже можете автоматически получить упаковку \n с помощью facet_wrap(..., labeller = labeller(ticker = label_wrap_gen(10))

NB2: некоторые серии не скачивались (все НС), я не заморачивался

person liborm    schedule 07.04.2017
comment
Я тоже думал о ggplot2. Но я предпочитаю вывод, заданный обычным графиком. Используя ggplot, все серии сглаживаются, чтобы иметь одинаковую шкалу Y. Не могли бы вы помочь мне изменить поля изображения выше? - person Francesco Bianchi; 09.04.2017
comment
Похоже, вам нужно facet_wrap(.., scales = "free_y") ;). Извините, я совсем не разбираюсь в базовой графике в R, но подозреваю, что у zoo будет свой собственный метод plot, который может спокойно игнорировать настройки par(). - person liborm; 09.04.2017
comment
Немного погуглив, я нашел это, где autoplot.zoo(), вероятно, облегчило бы построение графика ваши данные. - person liborm; 09.04.2017