0

我正在使用 dojox.charting.DataSeries 从 dojo.data.ItemFileReadStore 创建一个 Dojo 折线图。我正在使用 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 但标签将显示文本(在这种情况下是时间捕获文件大小的位置)。

当我调用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 来创建,但这不是一个很好的解决方法。

有谁知道如何扩展 formatLineGraphItem 方法以提供 x 轴标签。或者有没有人有任何关于对象 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 回答