2015-11-24 6 views
1

Я использую dygraphs и хотел бы изменить гранулярность оси x от ежедневного до ежегодного. У меня есть несколько ежедневных точек данных в формате c («2009-01-01», «2010-01-01», «2011-01-01»), а тиковые оси x появляются в январе 2009 года, июнь 2009, январь 2010, июнь 2010 Я хочу, чтобы ось й только появляется как «2009, 2010, 2011», соответствующие точки данных, которые на самом деле существуют ..R Dygraphs Размерность по оси X от месяца до года

у меня есть следующий код:

dygraph(hhinfl) %>% dyLegend(width=400, show="auto") %>% dyOptions(drawPoints=TRUE, pointSize=3) %>% dySeries("Household Inflation", color="#0174DF") %>% dySeries("date", color="#FFFFFF")%>% dySeries("Average Inflation", color="#DF0101") %>% dyAxis("y", label="Inflation Rate (%)") %>% dyAxis("x", drawGrid = FALSE, axisLabelFormatter="function(d) { return d.getFullYear() }") 

который возвращает YEAR каждой даты по оси x, но это означает, что существует несколько лет, таких как «Январь 2009, июнь 2009, январь 2010, июнь 2010» становится «2009, 2009, 2010, 2010»

В качестве альтернативы, другой код показывает:

dygraph(hhinfl) %>% dyLegend(width=400, show="auto") %>% dyOptions(drawPoints=TRUE, pointSize=3) %>% dySeries("Household Inflation", color="#0174DF") %>% dySeries("date", color="#FFFFFF")%>% dySeries("Average Inflation", color="#DF0101") %>% dyAxis("y", label="Inflation Rate (%)") %>% dyAxis("x", drawGrid = FALSE, ticker= " function (a, b, pixels, opts, dygraph, vals) {return Dygraph.getDateAxis(a, b, Dygraph.YEARLY, opts, dygraph);}", axisLabelFormatter="function(d) { return d.getFullYear() }") 

не возвращает график на всех, за исключением оси у, за исключением.

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

hhinfl построен файл XTS следующим образом:

dateseq<- seq(from=as.Date("2010-01-01"),to=as.Date("2013-12-31"),by="year") 
household<- c(2.3, 2.4, 2.5, 3.1) 
avg<- c(2.5, 2.6, 2.7, 3.1) 

hhinfl<- data.frame(date=dateseq, hh=household, average=avg) 
colnames(hhinfl)<- c("date", "Household Inflation", "Average Inflation") 
hhinfl<-xts(hhinfl, order.by=hhinfl$date) 
+0

Введите кадр данных или небольшую часть (используйте dput() для его производства). Таким образом, ответчики могут запускать код для проверки своих ответов. – lawyeR

+0

@lawyeR спасибо за комментарии, теперь я включил необходимый код для построения фрейма данных – stochastiq

+0

Ошибка в dySeries (., «Бытовая инфляция», цвет = «# 0174DF»): Одна или несколько указанных серий были не найдено. Допустимые имена серий: дата, чч, среднее. Это ошибка, которую я получаю при запуске вашего кода MWE. – lawyeR

ответ

1

Так близко! Прежде чем я заметил ваш «Альтернативно, другой код показывает:» выше, я написал код, по существу идентичный вашему (cribbing от http://jsfiddle.net/kaliatech/P8ehg/) и получил ту же самую заглушенную диаграмму.

Затем я наткнулся на https://github.com/danvk/dygraphs/blob/master/src/dygraph-tickers.js#L221 и увидел, что параметр должен быть ANNUAL, а не YEARLY.

Так вот что получается хорошо для меня:

dygraph(hhinfl) %>% 
    dyLegend(width=400, show="auto") %>% 
    dyOptions(drawPoints=TRUE, pointSize=3) %>% 
    dySeries("Household Inflation", color="#0174DF") %>% 
    dySeries("date", color="#FFFFFF") %>% 
    dySeries("Average Inflation", color="#DF0101") %>% 
    dyAxis("y", label="Inflation Rate (%)") %>% 
    dyAxis("x", drawGrid = FALSE) %>% 
    dyAxis("x", axisLabelFormatter="function(d) { return d.getFullYear() }") %>% 
    dyAxis("x", ticker="function(a, b, pixels, opts, dygraph, vals) { 
          return Dygraph.getDateAxis(a, b, Dygraph.ANNUAL, opts, dygraph) 
          // or TWO_HOURLY or SIX_HOURLY... 
         }")