Равные отметки оси X для данных временного ряда

У меня есть данные временных рядов, из которых я пытаюсь построить StackedAreaChart с nvd3. Серии выглядят так:

xdata = ['2017-11-17', '2017-12-17', '2018-01-17', '2018-02-17', '2018-03-17', '2018-04-17']
ydata = [7277L, 9579L, 6291L, 6715L, 8743L, 9879L]

Я конвертирую даты в формате xdata в формат Unix, и это становится так:

xdata = [1510873200000L,
   1513465200000L,
   1516143600000L,
   1518822000000L,
   1521241200000L,
   1523916000000L]

Затем я создаю диаграмму:

chart = stackedAreaChart(name='stackedAreaChart', 
                             height=400, 
                             width=400 
                             ,x_is_date=True
                            )
chart.add_serie(name = 'Chart1', y = ydata, x = xdata )

Проблема в том, что я хочу, чтобы все xdata отображались в виде галочек на оси x или, по крайней мере, настраивали их в случае большего количества данных. Я получаю вывод как на картинке ниже.

Как видите, даты отображаются не одинаково. Я бы хотел, чтобы это было 17 ноября 2017 года, 17 декабря 2017 года, 17 января 2018 года...

Я не работал с JS раньше, но все, что я пробовал, было неудачно. Я пытался добавить дополнительные серии, чтобы изменить формат оси X, но проблема в том, что дополнительные серии добавляются после построения графика, и эффект не виден.

2 ответа

Решение

Так что тут была выложена такая же проблема.

Подход состоит в том, чтобы назначить tickValues ​​для оси X для xdata. Вот решение, которое я написал:

chart = stackedAreaChart(name='stackedAreaChart' 
                         ,height=500 
                         ,width=900 
                         #,x_is_date=True
                         ,use_interactive_guideline = True
                         ,margin_bottom = 120
                        )
chart.create_x_axis(name = "xAxis", date = True,  format = '%b %Y' )
chart.axislist['xAxis']['tickValues']="""Object.values(datum[0])[0].map(x => x.x)"""

datum переменная данных, сгенерированная в сценарии JS на выходе chart.htmlcontent

Прежде чем я искал документацию для python-nvd3 но назначая tickValues там не документировано, поэтому мне пришлось делать это вручную с помощью javascript. Надеюсь, это кому-нибудь поможет.

Я предполагаю, что единственный способ надежно решить эту проблему - убедиться, что все ваши наборы данных имеют одинаковую длину, и что все они начинаются и заканчиваются с одинаковым значением оси X, и что если значение оси X равно определенный в одном из наборов данных, он также определен во всех других наборах данных, и что все наборы данных упорядочены по возрастанию значения оси X.

Поскольку я любитель nvd3, вполне возможно, что такой уровень согласованности не нужен, но, вероятно, он не может усугубить вашу проблему.

Другие вопросы по тегам