2017-02-02 22 views
0

Это выход, на который я нацелен, где z предоставит мой участок с осью x.R string vector seq

z<-c("2014-01", "", "", "2014-04", "", "", "2014-07", "", "","2014-10", "", "", "2015-01") 

Участок будет производиться один раз в месяц, и я нацелен на автоматизацию создания оси. 2015-01 - моя последняя доступная точка данных, и график отобразит интервал в 1 год до 2014-01. Следующее обновление заставит меня захотеть установить график до 2015-02 до 2014-02.

Как видно, маркировка оси возвращается через 3 месяца, оставляя тики между пустым.

Могу ли я автоматизировать этот процесс, предоставив только последнюю метку 2015-02, а остальная часть вычитается R каким-то образом?

Я думал, может быть, чтобы конвертировать отправную точку с 2015 по 2015 год в формат даты и последовательности до 2014-01. Затем сделайте его символом снова и используя его для оси ...

myz <- as.Date(c("2014-01", "2015-01"), "%Y - %m") 

Но мойз пуст. И из-за проблемы с пустой галочкой далеко от нее.

Любые советы?

+1

Вы возможно, захотите посмотреть на 'ggplot2', который имеет параметр' scale_x_date', который принимает аргумент 'date_breaks'. Например, этот аргумент может быть установлен на« 3 месяца ». – Haboryme

+0

' as.Date' требует день, поэтому вставьте один .. 'rng <- as.Date (вставить (c (« 2014-01 »,« 2015-01 »),« -01 »),«% Y -% m -% d »)', вы можете использовать 'seq' и' format' ... 'format (seq (rng [1], rng [2], «3 месяца»), «% Y-% m») ' – user20650

+0

@ user20650 - Это будет работать, если не для пустых тиков между отображаемыми строками даты. Есть ли способ определить формат (seq (rng [1], rng [2], «3 месяца»), «% Y-% m») ', отображающий« »,« », между каждым дата, которая выводится? как 'формат (seq (rng [1]," "," "rng [2]," 3 месяца "),"% Y-% m ")' @Haboryme: плохо изучите его. не уверен, могу ли я переносить свой сюжет в синтаксис ggplots ... –

ответ

0

Это может быть сделано более эффективно, но здесь решение:

version <- "201701" 
endDate = as.Date(paste0(version,"01"), "%Y%m%d") 

startDateString = paste0(as.integer(substr(version, 1, 4)) - 3, substr(version, 5, 6)) 
startDate = as.Date(paste0(startDateString,"01"), "%Y%m%d") 

rngx <- format(seq(startDate, endDate, "3 months"), "%Y-%m") 


output = c() 
for(i in 1:(length(rngx)-1)) { 
    output = c(output, rngx[i], "", "") 
} 
output = c(output, rngx[length(rngx)]) 

version <- "201701" отмечает дату начала (и используется для некоторых других частей в сценарии, а также, например, setwd()