首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jqplot不能使用日期轴渲染器正确缩放

jqplot不能使用日期轴渲染器正确缩放
EN

Stack Overflow用户
提问于 2012-08-05 10:11:42
回答 2查看 2K关注 0票数 4

我正在使用jqPlot (我相信是1.0.2版本-- 7/25/12版本)来呈现不同值的一天的太阳能产量。当我放大一天中的某一部分时,经常会呈现图表的错误区域。

这是绘图选项--

代码语言:javascript
运行
复制
    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伏交流电源)。通常有1440个样本,一天中每分钟一个样本。

我看到的情况是,我选择了一个区域,通常是4到6个小时,然后数据的错误部分被缩放。例如,如果我选择午夜到上午8点,我会看到4am到8am (或者9am,如果我放大到上午8点多一点)而不是缩放。这是相当一致的--显示的范围的后半部分--但我也看到一些实例,显示的内容没有韵律或原因,值可能被放大到如此之近,以至于我无法分辨什么是什么。

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

更新:我尝试从使用原始时间戳切换到使用Date()对象,但没有效果...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-04 00:06:44

我遇到了同样的问题。我不能切换到Flot,尽管它也是一个很好的包。我做了一些挖掘,在jqplot-users google组中找到了this post

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

代码语言:javascript
运行
复制
min = new $.jsDate(min);
min = min.getTime() + min.getUtcOffset();

但是,我不确定是否

代码语言:javascript
运行
复制
min = new $.jsDate(min);
min = min.getTime();

不管有没有必要,删除它可能不是一个好主意。我没有注意到任何异常,但是,我认为我们可以保留这些行,只是删除min.getUtcOffset()

票数 2
EN

Stack Overflow用户

发布于 2012-08-10 09:48:41

我不想低估jqPlot,它是一个用于构建视觉上吸引人的图形和图表的很好的插件,我建议您还可以看看用于构建具有缩放功能的图形的Flot。我两个都试过了,发现Flot对于这类需求更可靠。

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

Flot中的时间序列支持基于Javascript时间戳,您可以看到如下所示的时间戳:

代码语言:javascript
运行
复制
alert((new Date()).getTime())

.NET中,您可以使用以下命令获取相应的时间戳:

代码语言:javascript
运行
复制
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中还讨论了一些时间格式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11813457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档