2016-09-30 2 views
1

Как пометить ось y, используя timeSeries::plot, с греческими буквами? т. е. изменить SB, SP и т. д. на \ alpha, \ beta и т. д., я знаю, что мне нужно expression(), в некотором роде. Однако я даже не могу добраться до ярлыков (обычно я использую ggplot2). Код ниже.ярлык ylab in timeSeries :: plot, type = 'o'

plot

# install.packages("xtable", dependencies = TRUE) 
library("timeSeries") 

## Load Swiss Pension Fund Benchmark Data - 
    LPP <- LPP2005REC[1:12, 1:4] 
    colnames(LPP) <- abbreviate(colnames(LPP), 2) 
    finCenter(LPP) <- "GMT" 

timeSeries::plot(LPP, type = "o")  

Это было отмечено, что структура объекта, полученная с str(), вполне частности, в LPP по сравнению сказать, этот объект z

z <- ts(matrix(rnorm(300), 100, 3), start = c(1961, 1), frequency = 12) 
plot(z) 

Если какой-либо один есть ответ к обоим или к любому, я был бы признателен. Я понимаю, что я могу преобразовать данные и построить его с ggplot2, я видел, что здесь на SO, но я заинтересован в этом непосредственно на timeSeries объекта LPP и (объекта временных рядов) statsz

ответ

1

[ ПЕРЕСМОТР & Изменено]

Когда plot.type является "multiple", мы не можем определить ylab непосредственно. Оба метода plot(ts.obj) (S3) и plot(timeSeries.obj) (S4 метод) принимают colnames(obj) как ylab, и я не знаю никаких методов использования греческих букв как colname. (Разница в структуре в основном исходит от разницы S3 и S4; colnames(timeSeries.obj) эквивалентна [email protected]; по умолчанию Series i и TS.i).

Мы можем вмешаться ylab помощью arugument, panel (Он хочет function и по умолчанию lines). Он используется в for(i in 1:ncol(data)). Я не мог дать panel.function подходящий "i" (я думаю, это может быть в некотором роде, но я не придумал), поэтому я получил "i", используя данные, совпадающие с данными.

для timeSeries

ylabs <- expression(alpha, beta, gamma, delta) 
row1 <- LPP[1,] 

timeSeries.panel.f <- function(x, y, ...) { 
    lines(x, y, ...) 
    mtext(ylabs[which(row1 %in% y[1])], 2, line = 3) 
} 

plot(LPP, panel = timeSeries.panel.f, type = "o", ann = F) 
title("Title") 
mtext("Time", 1, line = 3) 

## If you aren't so concerned about warnings, here is more general. 
## (Many functions read `...` and they return warnings). 
timeSeries.panel.f2 <- function(x, y, ..., ylabs = ylabs, row1 = row1) { 
    lines(x, y, ...) 
    mtext(ylabs[which(row1 %in% y[1])], 2, line = 3) 
} 

plot(LPP, panel = timeSeries.panel.f2, type = "o", ann = F, 
    ylabs = expression(alpha, beta, gamma, delta), row1 = LPP[1,]) 
title("Title") 
mtext("Time", 1, line = 3) 

для ts

ylabs <- expression(alpha, beta, gamma) 
row1 <- z[1,] 

ts.panel.f <- function(y, ...) { 
    lines(y, ...) 
    mtext(ylabs[which(row1 %in% y[1])], 2, line = 3) 
} 

plot(z, panel = ts.panel.f, ann = F) 
title("Title") 
mtext("Time", 1, line = 3) 

enter image description here

Конечно вы можете АРХИВ его, используя новые функции, сделанные из оригинала (в основном такой же, как оригинал) , Я показал только измененные точки.

модифицированного plot(ts.obj) (из plot.ts)

my.plot.ts <- function(~~~, my.ylab = NULL) { 
    : 
    nm <- my.ylab # before: nm <- colnames(x) 
    : 
} 

# use 
my.plot.ts(z, my.ylab = expression(alpha, beta, gamma), type = "o") 

модифицированного plot(timeSeries.obj)

# made from `.plot.timeSeries` 
my.plot.timeSeries <- function(~~~, my.ylab = NULL) { 
    : 
    my.plotTimeSeries(~~~, my.ylab = my.ylab) 
} 

# made from `timeSeries:::.plotTimeSeries` 
my.plotTimeSeries <- function(~~~, my.ylab) { 
    : 
    nm <- my.ylab  # before: nm <- colnames(x) 
    : 
} 

#use 
my.plot.timeSeries(LPP, my.ylab = expression(alpha, beta, gamma, delta), type="o")