4

我正在使用 jqPlot(版本 1.0.2,我相信 - 2012 年 7 月 25 日发布)将一天的太阳能生产价值呈现为各种值。当我放大一天的一部分时,通常会呈现图表的错误区域。

这是情节选项 -

    var plotOptions = {
    series: [{ showMarker:false} ],
    axes: {
        xaxis:{
            renderer:jQuery.jqplot.DateAxisRenderer,
            tickOptions:{
                formatString:'%R'
            },
            min: data[0].time * 1000,
            max: data[data.length - 1].time * 1000
        },
        yaxis: {
            tickOptions: {
                formatString: '%.3f'
            }
        }
    },
    highlighter: {
        show : true,
        sizeAdjust: 7.5
    },
    cursor: {
        show : true,
        zoom: true,
        showToolTip: false
    }
};

数据是整个电气系统的 1 分钟样本,当前默认值为一个相腿上的交流电流(标准北美电气系统 -- 120/240 伏交流电源)。通常有 1,440 个样本,一天中的每一分钟都有一个样本。

我看到的情况是我将选择一个区域,通常是 4 或 6 小时,并且正在缩放数据的错误部分。例如,如果我选择午夜到上午 8 点,我会看到上午 4 点到上午 8 点(或者可能是上午 9 点,如果我放大一点点超过上午 8 点)反而放大了。这是相当一致的 - 显示范围的后半部分 - 但我也看到没有押韵或理由显示的实例,并且值可能被放大得如此接近我无法分辨是什么。

我试图从示例中大量窃取,但无济于事。我也尝试过限制我的数据集的大小,但这似乎没有多大帮助。

更新:我尝试从使用原始时间戳切换到使用 Date() 对象,但无济于事......

4

2 回答 2

2

我遇到了同样的问题。我无法切换到 Flot,虽然它也是一个很好的包。我进行了一些挖掘,并在 jqplot-users google 组中找到了这个帖子,该组有答案。

这是简短的答案。src\plugins\jqplot.dateAxisRenderer.js 中有一个错误。该帖子说解决方法是在 dataAxisRenderer.js 文件中注释掉以下内容

min = new $.jsDate(min);
min = min.getTime() + min.getUtcOffset();

但是,我不确定是否

min = new $.jsDate(min);
min = min.getTime();

是否有必要,删除它可能是一个坏主意。我没有注意到任何问题,但是,我认为我们可以保留这些行并删除min.getUtcOffset().

于 2012-10-03T16:06:44.247 回答
1

不要低估jqPlot,它是一个用于构建具有视觉吸引力的图形和图表的出色插件,我建议您也看看Flot以构建具有缩放功能的图形。我都试过了,发现Flot对于这种要求更可靠。

使用 Flot 时配置DateTime轴的一些技巧(来自Flot Reference):

Flot 中的时间序列支持基于 Javascript 时间戳,您可以看到这样的时间戳:

alert((new Date()).getTime())

.NET中,您可以获得适当的时间戳:

public static int GetJavascriptTimestamp(System.DateTime input)
{
    System.TimeSpan span = new System.TimeSpan(System.DateTime.Parse("1/1/1970").Ticks);
    System.DateTime time = input.Subtract(span);
    return (long)(time.Ticks / 10000);
}

在这个SO question中讨论了一些时间格式。

于 2012-08-10T01:48:41.253 回答