2016-08-31 2 views
1

Я использую R с quantmod визуализировать некоторые данныеR quantmod манипулируют ось х

library(quantmod) 

# calculate the dates before and after date of interest 
t1 <- as.Date(as.character(20101018),"%Y%m%d") - 25 
t2 <- as.Date(as.character(20101018),"%Y%m%d") + 10 

# get historical data 
current_Stock <- getSymbols("AAPL", src="yahoo", from=t1, to=t2, auto.assign = FALSE) 

# plot this stuff 
chartSeries(current_Stock, name = "AAPL", TA = NULL) 
# mark day of interest 
addTA(xts(TRUE,as.POSIXlt(as.Date(as.character(20101018),"%Y%m%d"))),on=-1, col="gray19") 

, который дает следующую таблицу:

My chart

теперь я хочу, чтобы эти даты на axis быть вертикальным (повернут на 90 градусов) и без года, как в ответе this thread, а затем распечатать day of interest (где серый столбец) в bold и в gray.

Результат other thread имеет следующую схему:

Not my chart

Но это решение для chart_Series и мне нравится дизайн и расцветку chartSeries от quantmod лучше.

Как мне сделать

  • В XAxis, как на второй картинке?
  • Печатать день под серым листом, выделенным жирным шрифтом и серым?

ответ

1

Вы можете подавить й-ось, проходящую с использованием грубой метод, error (Насколько я знаю, это самое простое) и chartSeries(..., TA="add.TA.obj") (потому что addTA() делает ось). Тогда все, что осталось, - сделать ось нужной.

library(quantmod) 

### preparation of data (the same as OP's) 
t1 <- as.Date(as.character(20101018),"%Y%m%d") - 25 
t2 <- as.Date(as.character(20101018),"%Y%m%d") + 10 
current_Stock <- getSymbols("AAPL", src="yahoo", from=t1, to=t2, auto.assign = FALSE) 

### [Edited] preparation of main plot data (I used 2010-10-15 as an interest day) 
no_axis <- x <- chartSeries(current_Stock, name = "AAPL", # be careful of ' and " in TA.block 
        TA = "addTA(xts(TRUE, as.POSIXlt(as.Date('20101015', '%Y%m%d'))), on=-1, col='gray19')", plot=F) 

### make plot without x-axis 
[email protected] <- "a"     # throw something to x.labels to cause error 
quantmod:::chartSeries.chob(no_axis) # The error stops x-axis coming 
    # try(quantmod:::chartSeries.chob(no_axis), silent = T) # supprres warning version 

### make x-axis (I used "[email protected]$border" but original is "[email protected]$major.tick") 
interest <- which(strptime([email protected], "%b %d %Y") == "2010-10-15") # index of the day 

par(mar = c(3.5, 3.5, 0, 3)) # I modified lab.position a little by padj. 
axis(1, at = (1 + [email protected] * [email protected] - [email protected])[-interest], padj = 0.4, 
    labels = (format(strptime([email protected], "%b %d %Y"), "%b %d"))[-interest], 
    las = 2, mgp = c(3, 0.7, 0), col = [email protected]$border, col.axis = [email protected]$border) 
axis(1, at = (1 + [email protected] * [email protected] - [email protected])[interest], padj = 0.4, 
    labels = (format(strptime([email protected], "%b %d %Y"), "%b %d"))[interest], 
    las = 2, mgp = c(3, 0.7, 0), col = [email protected]$border, col.axis = "gray", font.axis=2) 

enter image description here

+0

вау, это именно то, что я искал. Хороший код и красивый выход. Это работает, когда я выполняю его в одиночку. Я подавил ошибку с помощью 'try (quantmod ::: chartSeries.chob (no_axis), silent = T)', поскольку скрипт не захотел закончить после ошибки. У вас есть какие-либо советы о том, как включить это в функцию? Поскольку при вводе кода в функцию, «R» дает следующую ошибку: «Ошибка в eval (expr, envir, enc): объект« my_ta »не найден», и я не знаю, как его обрабатывать. – user3079834

+0

ОК, я могу ответить на это сам: немного попробовав, я просто поместил код непосредственно в блок TA, поэтому теперь он читает 'no_axis <- x <- chartSeries (symbol_data, subset = curr_interval, name = stock_name, TA = "addTA (xts (TRUE, as.POSIXlt (dateOfInterest)), on = -1, col = 'gray19')", plot = F) 'в одной строке вместо двух. – user3079834

+1

@ user3079834; Я чувствовал, что ваш дополнительный код классный, поэтому я редактировал :-) – cuttlefish44