javascript - Jquery Flot用DateTime填充两个数据集并做出重叠效果

标签 javascript jquery jquery-plugins charts flot

我有一个图表(下图),其中绿线代表 2014 年,紫色线代表 2013 年。

enter image description here

var data1 = [
        [gd(2014, 1, 1), 4], [gd(2014, 2, 1), 8], [gd(2014, 3, 1), 4], [gd(2014, 4, 1), 10],
        [gd(2014, 5, 1), 4], [gd(2014, 6, 1), 16], [gd(2014, 7, 1), 5]];    

    var data2 = [
        [gd(2014, 1, 1), 1], [gd(2014, 2, 1), 0], [gd(2014, 3, 1), 2], [gd(2014, 4, 1), 0],
        [gd(2014, 5, 1), 1], [gd(2014, 6, 1), 3], [gd(2014, 7, 1), 1], [gd(2014, 8, 1), 5],
        [gd(2014, 9, 1), 2], [gd(2014, 10, 1), 3], [gd(2014, 11, 1), 2], [gd(2014, 12, 1), 1]]; 

这是数据集,但请注意,我将两个数据集都放在 2014 年,因为如果我将 2014 年放在一个数据集中,将 2013 年放在另一个数据集中,我会错过重叠效果,并且需要该效果进行比较。

如果将 2013 年放入一个数据集中,将 2014 年放入另一个数据集中,就会发生这种情况(下图)

enter image description here

如何在一个数据集中使用 2013 年制作相同的图表,但具有重叠效果?

这也将修复我的悬停功能。

代码

var data1 = [
        [gd(2014, 1, 1), 4], [gd(2014, 2, 1), 8], [gd(2014, 3, 1), 4], [gd(2014, 4, 1), 10],
        [gd(2014, 5, 1), 4], [gd(2014, 6, 1), 16], [gd(2014, 7, 1), 5]];    

    var data2 = [
        [gd(2014, 1, 1), 1], [gd(2014, 2, 1), 0], [gd(2014, 3, 1), 2], [gd(2014, 4, 1), 0],
        [gd(2014, 5, 1), 1], [gd(2014, 6, 1), 3], [gd(2014, 7, 1), 1], [gd(2014, 8, 1), 5],
        [gd(2014, 9, 1), 2], [gd(2014, 10, 1), 3], [gd(2014, 11, 1), 2], [gd(2014, 12, 1), 1]];

    $("#flot-dashboard-chart").length && $.plot($("#flot-dashboard-chart"), [
        data1, data2
    ],
            {
                series: {
                    lines: {
                        show: false,
                        fill: true
                    },
                    splines: {
                        show: true,
                        tension: 0.4,
                        lineWidth: 1,
                        fill: 0.4
                    },
                    points: {
                        radius: 2,
                        show: true
                    },
                    shadowSize: 2
                },
                grid: {
                    hoverable: true,
                    clickable: true,
                    tickColor: "#d5d5d5",
                    borderWidth: 1,
                    color: '#d5d5d5'
                },
                colors: ["#1ab394", "#464f88"],
                xaxis: {
                    mode: "time",
                    tickSize: [1, "month"],
                    tickLength: null,
                    axisLabel: "Date",
                    axisLabelUseCanvas: true,
                    axisLabelFontSizePixels: 12,
                    axisLabelFontFamily: 'Arial',
                    axisLabelPadding: 10,
                    color: "#838383",
                    timeformat: "%b/%y"
                },
                yaxis: {
                    ticks: 4
                }
            }
    );

function gd(year, month, day) {
    return new Date(year, month - 1, day).getTime();
}

最佳答案

您使用了多个轴的概念,但只是隐藏了第二个轴。

为此,您需要创建两个数据集,每个数据集都有自己的轴:

var data2014 = {
    label: "2014",
    data: data1,
    xaxis: 1
};
var data2013 = {
    label: "2013",
    data: data2,
    xaxis: 2
};

然后在axes选项设置中,将ticks设置为false以隐藏一个轴。 2014 年数据的 max 设置很重要,否则数据集将缩放以填充整个图表:

xaxes: [{
          mode: "time",
          tickSize: [1, "month"],
          tickLength: null,
          color: "#838383",
          timeformat: "%b",
          max: (new Date("2014/12/1")).getTime()
        },{
          ticks: false 
        }],

JS Fiddle here

Graph with 2 axes

完整代码如下:

var data1 = [
        [gd(2014, 1, 1), 4], [gd(2014, 2, 1), 8], [gd(2014, 3, 1), 4], [gd(2014, 4, 1), 10],
        [gd(2014, 5, 1), 4], [gd(2014, 6, 1), 16], [gd(2014, 7, 1), 5]];    

    var data2 = [
        [gd(2013, 1, 1), 1], [gd(2013, 2, 1), 0], [gd(2013, 3, 1), 2], [gd(2013, 4, 1), 0],
        [gd(2013, 5, 1), 1], [gd(2013, 6, 1), 3], [gd(2013, 7, 1), 1], [gd(2013, 8, 1), 5],
        [gd(2013, 9, 1), 2], [gd(2013, 10, 1), 3], [gd(2013, 11, 1), 2], [gd(2013, 12, 1), 1]];

var data2014 = {
    label: "2014",
    data: data1,
    xaxis: 1
};
var data2013 = {
    label: "2013",
    data: data2,
    xaxis: 2
};

    $("#flot-dashboard-chart").length && $.plot($("#flot-dashboard-chart"), [
        data2014, data2013
    ],
            {
                series: {
                    lines: {
                        show: false,
                        fill: true
                    },
                    splines: {
                        show: true,
                        tension: 0.4,
                        lineWidth: 1,
                        fill: 0.4
                    },
                    points: {
                        radius: 2,
                        show: true
                    },
                    shadowSize: 2
                },
                grid: {
                    hoverable: true,
                    clickable: true,
                    tickColor: "#d5d5d5",
                    borderWidth: 1,
                    labelMargin: 17,
                    margin: {
                        top: 8,
                        bottom: 10,
                        left: 20
                    },
                    minBorderMargin: 25,
                    color: '#d5d5d5'
                },
                colors: ["#1ab394", "#464f88"],
                xaxes: [{
                    mode: "time",
                    tickSize: [1, "month"],
                    color: "#838383",
                    timeformat: "%b",
                    max: (new Date("2014/12/1")).getTime()
                },{
                    ticks: false,
                }],
                yaxis: {
                    ticks: 5
                },
                legend: {         
                    backgroundOpacity: 0.5,
                    noColumns: 0,
                    position: "ne",
                    color: "#838383",
                }
        }
    );

function gd(year, month, day) {
    return new Date(year, month - 1, day).getTime();
}

关于javascript - Jquery Flot用DateTime填充两个数据集并做出重叠效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24805537/

相关文章:

javascript - 将 jQuery 转换为等效的 JavaScript 代码

jquery - 启用/禁用 jqGrid 中的自定义按钮

javascript - jQuery 标签 'for' 属性选择器

javascript - Lodash - 按数组中的位置排序

javascript - 有没有办法捕捉访问不存在的属性或方法的尝试?

javascript - ExtJs 手动触发 Click 事件,按钮参数与鼠标点击不同

javascript - 设置显示:flex as the default for a display:none element in css?

javascript - 提示确认框,取消应该停止执行

jquery模式弹出窗口从文件中读取

jQuery 改变 <img> 的色调、饱和度、gamma?