Линейная диаграмма Dojo из JSON с несколькими сериями и общей осью X

Я считаю, что то, что я пытаюсь выполнить, должно быть довольно распространенной задачей, но мне трудно заставить ее работать. Я просто хочу создать многосерийный график из набора данных, содержащего (для каждой записи) временную метку ISO8601 вместе с несколькими точками данных. Данные представлены в формате JSON, и я использую тип dojox.charting.chart «Линии».

Я уже знаю, что диаграммы Dojo не могут напрямую обрабатывать данные оси времени, не говоря уже об ISO8601. Итак, я уже имел дело с преобразованием оси x в миллисекунды с момента T0 на стороне сервера.

Вот дистиллированный пример выдержки из моего JSON:

[{"Offset_ms":0,"CP":250.58368,"TP":181.88211},
{"Offset_ms":360000,"CP":233.18443,"TP":119.94824},
{"Offset_ms":540000,"CP":227.15465,"TP":117.99422},
{"Offset_ms":720000,"CP":222.87495,"TP":117.55895},
{"Offset_ms":896000,"CP":218.19876,"TP":117.64221},
{"Offset_ms":900000,"CP":219.77487,"TP":117.93475}]

И дистиллированный JavaScript (предположим, что приведенный выше JSON находится в переменной 'sequenceData'):

var chart = new dojox.charting.Chart("sequenceDataGraph");

chart.addPlot("default", {
    type: "Lines",
    tension: "X"
});
chart.addAxis("x", { labelFunc: labelTimeAxis });
chart.addAxis("y", { vertical: true });

var sequenceDataStore = new dojo.store.Observable(new dojo.store.Memory({
    data: {
        label: "Sequence",
        items: sequenceData
    }
}));

addSequenceDataSeries(chart, sequenceDataStore, "TP");
addSequenceDataSeries(chart, sequenceDataStore, "CP");

chart.render();

function addSequenceDataSeries(chart, sequenceDataStore, sColumnName) {
    chart.addSeries(sColumnName, new dojox.charting.StoreSeries(sequenceDataStore, { query: {} },
                    sColumnName));
}

Что, по-видимому, происходит, так это то, что Dojo Chart вообще не использует данные по оси X, а вместо этого отображает каждую точку с фиксированным интервалом на основе количества точек данных. То есть, кажется, что каждой точке данных присвоен порядковый номер, например, если бы Offset_ms было просто 1, 2, 3... Поскольку мои точки данных не всегда находятся с фиксированными интервалами, результирующий график искажен. .

Как указать Dojo Chart использовать поле «Offset_ms» в данных JSON для компонента оси X?

Я просмотрел учебные пособия, документы API и выполнил многочисленные поиски в Google и SO, но безрезультатно. Я даже просмотрел некоторые части исходного кода Dojo, в частности StoreSeries.js.uncompressed.js, но не нашел ответов. Конечно, это возможно, и, надеюсь, тривиально!


person BrandonLWhite    schedule 13.06.2012    source источник


Ответы (1)


К сожалению, официальной документации по додзё серьезно не хватает, и я понял, как сделать что-то подобное, только просматривая исходный код додзё. В частности, строка 135 теста StoreSeries, http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/charting/tests/test_StoreSeries.html

Третий аргумент конструктора StoreSeries принимает объект, который сопоставляет оси X и Y с определенными полями в вашем хранилище данных.

Измените следующую строку в вашем коде:

chart.addSeries(sColumnName, new dojox.charting.StoreSeries(sequenceDataStore, { query: {} },
                sColumnName));

к этому:

chart.addSeries(sColumnName, new dojox.charting.StoreSeries(sequenceDataStore, { query: {} }, 
                { x: "Offset_ms", y: sColumnName }));

sColumnName становится { x: "Offset_ms", y: sColumnName }

person Phil G    schedule 13.06.2012
comment
Спасибо, это работает!! В качестве продолжения, как именно я должен узнать об этом альтернативном способе инициализации третьего аргумента ctor, называемого «значение»? Из документации по Dojo API: функция, которая принимает дескриптор объекта и выдает результат, возможно, проверяющий товар в магазине. Или объект словаря, который сообщает, какие имена извлекать из объекта и как отображать их на выходе. Или строка, представляющая собой числовое имя поля, используемое для построения графика. Если не определено, нулевая или пустая строка (по умолчанию), поле значения извлекается. -- это здорово, но ничего о том, что может быть ключом/значением словаря! - person BrandonLWhite; 14.06.2012