jqplot未使用日期轴渲染器正确缩放

时间:2012-08-05 02:11:42

标签: jqplot zooming

我正在使用jqPlot(版本1.0.2,我相信 - 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点后稍微缩放),则会缩放。这是相当一致的 - 显示范围的后半部分 - 但我也看到没有押韵或理由显示的情况,并且值可能放大得如此接近我无法分辨出什么是什么。 / p>

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

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

2 个答案:

答案 0 :(得分:2)

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

这是简短的回答。 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()

答案 1 :(得分:1)

不要试图低估jqPlot,这是一个用于构建视觉上吸引人的图形和图表的绝佳插件,我建议你也看一下Flot来构建具有缩放功能的图形。我已经尝试了两种方法,发现 Flot 对于这种要求更加可靠。

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

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中讨论了一些时间格式。