Добавление меток оси x при использовании dojox.charting.DataSeries - PullRequest
0 голосов
/ 21 ноября 2011

Я создаю линейную диаграмму Dojo из dojo.data.ItemFileReadStore, используя dojox.charting.DataSeries.Я использую третий параметр (значение) конструктора DataSeries, чтобы указать метод, который будет генерировать точки на графике.например,

function formatLineGraphItem(store,item) 
{   
    var o = {
        x: graphIndex++, 
        y: store.getValue(item, "fileSize"),
    };
    return o;
}

GraphIndex - это целое число, которое увеличивается для каждого значения fileSize.Это дает мне линейную диаграмму с fileSize, показанным против числового числа.Это прекрасно работает.

Я хотел бы иметь возможность указать метку оси x для использования вместо значения graphIndex, т. Е. Лежащие в основе данные по-прежнему будут 1,2,3,4, нометка будет отображать текст (в этом случае время, когда размер файла был захвачен).

Я могу сделать это, передав массив меток в x asis, когда я вызываю chart.addAxis (), но для этого требуется, чтобы я знал значения, прежде чем выполнять итерацию по данным.Например,

var dataSeriesConfig = {query: {id: "*"}};
var xAxisLabels = [{text:"2011-11-20",value:1},{text:"2011-11-21",value:2},{text:"2011-11-22",value:3}];

var chart1 = new dojox.charting.Chart("chart1");
chart1.addPlot("default", {type: "Lines", tension: "4"});
chart1.addAxis("x", {labels: xAxisLabels});
chart1.addAxis("y", {vertical: true});
chart1.addSeries("Values", new dojox.charting.DataSeries(dataStore, dataSeriesConfig, formatLineGraphItem));
chart1.render();

Массив xAxisLabels можно создать, предварительно подготовив dataSeries, но это не очень хорошая работа.

Есть ли у кого-нибудь идеи, как можно расширить метод formatLineGraphItem для предоставленияметки оси X.Или у кого-нибудь есть документация о том, какие значения может содержать объект?

Заранее спасибо!

1 Ответ

2 голосов
/ 21 ноября 2011

Для этого потребуется метка времени Unix, умножьте значение на 1000 (чтобы у него было микросекунда для JavaScript, а затем передайте значение в дату dojo для его форматирования).У вас не должно возникнуть проблем с редактированием в нужный вам формат.

Вы привели примеры, что ваши даты похожи на «1», «2», «3», что явно неверно.Это не даты ... так что это лучшее, что вы можете сделать, если не отредактируете свой вопрос.

 chart1.addAxis("x",{
            labelFunc: function(n){              
                if(isNaN(dojo.number.parse(n)) || dojo.number.parse(n) % 1 != 0){
                    return " ";
                }
                else {
                    // I am assuming that your timestamp needs to be multiplied by 1000. 
                    var date = new Date(dojo.number.parse(n) * 1000);
                    return dojo.date.locale.format(date,  {
                        selector: "date",
                        datePattern: "dd MMMM",
                        locale: "en"
                    });
                }
            },
            maxLabelSize: 100
        }
...