0

dojox.charting.DataSeries を使用して dojo.data.ItemFileReadStore から Dojo 折れ線グラフを作成しています。DataSeries のコンストラクターの 3 番目のパラメーター (値) を使用して、チャート上のポイントを生成するメソッドを指定しています。例えば

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

graphIndex は、fileSize 値ごとに増分される整数です。これにより、数値カウントに対して表示される fileSize を含む折れ線グラフが得られます。これはうまくいきます。

私が望むのは、graphIndex の値の代わりに使用する x 軸ラベルを指定できるようにすることです。つまり、下にあるデータは 1,2,3,4 のままですが、ラベルにはテキストが表示されます (この場合、ファイルサイズがキャプチャされた場所)。

これを行うには、chart.addAxis() を呼び出すときにラベルの配列を x asis に渡しますが、データを反復処理する前に値を知る必要があります。例えば

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 を準備することで作成できますが、あまり良い回避策ではありません。

x 軸ラベルを提供するために formatLineGraphItem メソッドを拡張する方法を知っている人はいますか? または、オブジェクト o に含めることができる値に関するドキュメントを誰かが持っていますか?

前もって感謝します!

4

1 に答える 1

2

これは UNIX タイムスタンプを取り、その値に 1000 を掛けます (JavaScript の場合はマイクロ秒になるようにし、その値を dojo date に渡してフォーマットします)。これを必要な形式に編集するのに問題はないはずです。

日付が「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
        }
于 2011-11-21T18:10:49.707 に答える