Flot折线图时间xaxis系列固定标签

时间:2018-03-19 14:03:26

标签: javascript jquery charts flot

我想创建一个带有时间xaxis系列的flot折线图,该系列总是固定数量的标签为6.这6个标签将是每年的一半,为期3年。例如,标签可以是Jan-2016, June-2016, Jan-2017, June-2017, Jan-2019, June-2018。这里的年份可以根据当前日期进行更改,但月份将是固定的。现在这些标签基于图表数据显示。因此,我的数据在2017年1月至2018年7月之间没有任何价值,因此未出现。此外,如果有单个数据,则不会出现xaxis标签。

那么无论数据是什么,我怎么能一直有六个标签?

我附上了两个例子。一个只有一个值,所以它不显示xaxis标签,第二个例子有多个点,然后也没有出现所有标签。



var flotLineOption = {            
	series: {
		lines: {
			show: true,
			fill: 0.01
		},
		points: {
			show: true,
			radius: 4
		}
	},
	grid: {
		borderColor: '#eee',
		borderWidth: 1,
		hoverable: true,
		backgroundColor: '#fcfcfc',
		margin: { bottom : 50 }
	},
	tooltip: true,
	tooltipOpts: {
		content: function (label, x, y) {
			var objDate = new Date(x);
			var yearValue = objDate.getFullYear();
			objDate = new Date(x).setMonth(objDate.getMonth() - 1);
			var monthName = new Date(objDate).toLocaleString("en-us", { month: "short" });
			return monthName + " " + yearValue + ' : ' + y; 
		}
	},
	xaxis: {
		tickColor: '#eee',
		tickDecimals: 0,
		tickSize: 6,
		show: true,
		mode: "time",
		timeformat: "%b %y",
		ticks: [new Date(2017,1).getTime(), new Date(2017,6).getTime(), new Date(2018,1).getTime(), new Date(2018,6).getTime(), new Date(2019,1).getTime(), new Date(2019,6).getTime()]
	},
	yaxis: {
		position: 'left',
		tickColor: '#eee',
		tickDecimals: 0
	},
	shadowSize: 0
};

function getData(){
    var data = [];

	
	data.push([new Date(2017, 2).getTime(), 8])
	data.push([new Date(2017, 8).getTime(), 2])
	data.push([new Date(2018, 3).getTime(), 9])
	data.push([new Date(2018, 9).getTime(), 3])
	data.push([new Date(2019, 4).getTime(), 7])

    return data;
}

$(function () { 
    
    $.plot($("#flotcontainer"),
        [
            {data: getData() }
        ],
        flotLineOption
    );
	
	$.plot($("#flotcontainer1"),
        [
            {data: [[new Date(2017, 4).getTime(), 7]] }
        ],
        flotLineOption
    );

});

#flotcontainer {
    width: 600px;
    height: 200px;
    text-align: center;
    margin: 0 auto;
}

#flotcontainer1 {
    width: 600px;
    height: 200px;
    text-align: center;
    margin: 50px auto  0 auto;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/excanvas.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/jquery.flot.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/jquery.flot.time.js"></script>
<div id="flotcontainer"></div>
<div id="flotcontainer1"></div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

Flot在第一个数据点开始图表并在最后一个数据点结束。这会导致您的滴答声在图表之外。设置x轴的最小值和最大值以显示所有刻度:

1 2 3
4 5 6

xaxis: {
    //other options
    min: new Date(2017, 1).getTime(),
    max: new Date(2019, 6).getTime()
}
var flotLineOption = {
  series: {
    lines: {
      show: true,
      fill: 0.01
    },
    points: {
      show: true,
      radius: 4
    }
  },
  grid: {
    borderColor: '#eee',
    borderWidth: 1,
    hoverable: true,
    backgroundColor: '#fcfcfc',
    margin: {
      bottom: 50
    }
  },
  tooltip: true,
  tooltipOpts: {
    content: function(label, x, y) {
      var objDate = new Date(x);
      var yearValue = objDate.getFullYear();
      objDate = new Date(x).setMonth(objDate.getMonth() - 1);
      var monthName = new Date(objDate).toLocaleString("en-us", {
        month: "short"
      });
      return monthName + " " + yearValue + ' : ' + y;
    }
  },
  xaxis: {
    tickColor: '#eee',
    tickDecimals: 0,
    tickSize: 6,
    show: true,
    mode: "time",
    timeformat: "%b %y",
    ticks: [new Date(2017, 1).getTime(), new Date(2017, 6).getTime(), new Date(2018, 1).getTime(), new Date(2018, 6).getTime(), new Date(2019, 1).getTime(), new Date(2019, 6).getTime()],
    min: new Date(2017, 1).getTime(),
    max: new Date(2019, 6).getTime()
  },
  yaxis: {
    position: 'left',
    tickColor: '#eee',
    tickDecimals: 0
  },
  shadowSize: 0
};

function getData() {
  var data = [];


  data.push([new Date(2017, 2).getTime(), 8])
  data.push([new Date(2017, 8).getTime(), 2])
  data.push([new Date(2018, 3).getTime(), 9])
  data.push([new Date(2018, 9).getTime(), 3])
  data.push([new Date(2019, 4).getTime(), 7])

  return data;
}

$(function() {

  $.plot($("#flotcontainer"), [{
      data: getData()
    }],
    flotLineOption
  );

  $.plot($("#flotcontainer1"), [{
      data: [
        [new Date(2017, 4).getTime(), 7]
      ]
    }],
    flotLineOption
  );

});
#flotcontainer {
  width: 600px;
  height: 200px;
  text-align: center;
  margin: 0 auto;
}

#flotcontainer1 {
  width: 600px;
  height: 200px;
  text-align: center;
  margin: 50px auto 0 auto;
}