2016-09-02 3 views
-1

Я пытался нарисовать несколько строк в одном и том же сюжете. Х-фактор определяется датой и у-фактором числом. Я сначала загрузить данные, хранить его в списке и сохранить минимальное и максимальное значения для даты:Дата как xlim в R

stocks <- list() 
stocks.min <- 0 
stocks.max <- 0 
stocks.min.date <- NULL 
stocks.max.date <- NULL 
for (name in names(files)) 
{ 
    stocks[[name]] <- read.csv(files[[name]], sep=";") 

    # Convert to date in R 
    stocks[[name]]$Date <- as.Date(stocks[[name]]$Date, "%d/%m/%Y") 

    # Sets max value for ylim in the plotting 
    if (stocks.max < max(stocks[[name]]$Close)) 
    { 
    stocks.max <- max(stocks[[name]]$Close) 
    } 

    # Sets the date value for the xlim in the plot 
    if (is.null(stocks.min.date) || min(stocks[[name]]$Date) < stocks.min.date) 
    { 
    stocks.min.date <- min(stocks[[name]]$Date) 
    } 
    if (is.null(stocks.max.date) || max(stocks[[name]]$Date) > stocks.max.date) 
    { 
    stocks.max.date <- max(stocks[[name]]$Date) 
    } 
} 

После этого я создаю пустой участок, используя значения из выше:

plot(0, xlab="Time", ylab="Closing Prices", main="Stock Values", 
xlim=c(stocks.min.date, stocks.max.date), ylim=c(stocks.min, stocks.max)) 

И затем я добавить строки с данными:

for (name in names(stocks)) 
{ 
    lines(x=stocks[[name]]$Date, y=stocks[[name]]$Close, col=colors[[name]], type="l", 
    lwd=2) 
} 

Когда график нанесены, правильно отображаются данные, но он показывает дату как номера вместо дат в оси х, как показано на изображении ниже:

enter image description here

Как я могу исправить эту проблему?

+0

'запасы [[name]] $ Дата <- as.Date (запасы [[name]] $ Date)' перед командой построения графика, а затем ваша надпись будет работать должным образом. – jdobres

+0

Я уже делаю это, когда я загружаю данные в первый цикл for – Daniel

ответ

1

Я бы настоятельно рекомендовал использовать нормированную серию для составления данных о запасах, которые у вас есть. quantmod помогает здесь много. Он решает две цели:

  1. Получите ярлыки оси x в качестве дат.
  2. Нормализовать серии, так что вы можете просматривать любое количество рядов, не заботясь о порядках их абсолютных значений (~ 67 для INR, ~ 1120 для корейских вон, так далее ...)

Это то, что я обычно используют для моих целей.

library(quantmod) 

tickers <- c('GOOG', 'MSFT', 'AAPL', 'AMZN') 
getSymbols(tickers, src = 'yahoo', from = '2015-01-01') 

normalise <- function(x) x/as.numeric(x)[1] - 1 

chart_theme <- chart_theme() 
chart_theme$col$line.col <- "red" 

chart_Series(normalise(Cl(GOOG)), theme = chart_theme) 
add_TA(normalise(Cl(MSFT)), on = 1, col = "black", lty = 1) 
add_TA(normalise(Cl(AMZN)), on = 1, col = "blue", lty =1) 
add_TA(normalise(Cl(AAPL)), on = 1, col = "darkgreen", lty =2) 

enter image description here

Надеется, что это помогает.

+0

Я не мог выполнить эту работу и не использовать ее так, чтобы время было правильно показано =/ – Daniel

+0

Были ли у вас возможности реплицировать код? Какие ошибки он проявляет при попытке воспроизвести вышеизложенное или когда вы модифицируете код для своих нужд? – prateek1592

+0

Я просмотрел свой код и нашел ошибку, спасибо =) – Daniel

Смежные вопросы