月份或年份 xaxis 的浮动

Flot with months or years xaxis

我正在尝试调整 flot 生成的图表上 x 轴的外观。这是代码:

$(function () {
var data1 = [[1451599200000,0],[1454277600000,0],[1456783200000,104],[1459458000000,67]];
var data2 = [[1451599200000,48],[1454277600000,48],[1456783200000,53],[1459458000000,37]];

var options = {
      series: {
        bars: {
          show: true,
        }
      },
      xaxis: {
        mode: "time",
        timeformat: "%m-%Y",
      }
      };

var plotObj = $.plot($("#placeholder"), [{
        data: data1,
        label: "Data1",
      }, {
        data: data2,
        label: "Data2",
      }],
      options);
});

这是我得到的结果。

问题 #1:我的数据数组包含 [timestamp,value] 对,我希望 x 轴使用时间戳,在本例中是一个月。每个条只需要一个 x 轴标签。如果使用类别插件会更好,请给我一个如何使用它的示例,我可以修改我的 JSON 数据,以便时间戳是字符串而不是时间戳。

问题 #2:是否可以根据 JSON 中存在的数据点数量来调整条形的宽度?这样它们就不会像我的示例中那样薄。

Link 到 jsfiddle:https://jsfiddle.net/prxbl/ubewvjkr/2/

切换到 x 轴的 "Categories" 是解决方案。首先,您需要包含插件 jquery.flot.categories.min.js,然后调整 json 数据以使用字符串而不是时间戳。示例代码:

$(function () {
var data1 = [["01-2016",0],["02-2016",0],["03-2016",104],["04-2016",67]];
var data2 = [["01-2016",48],["02-2016",48],["03-2016",53],["04-2016",37]];

var options = {
      series: {
        bars: {
          show: true,
          barWidth: 0.6,
                    align: "center"
        }
      },
      xaxis: {
       mode: "categories",
                tickLength: 0
      }
      };

var plotObj = $.plot($("#placeholder"), [{
        data: data1,
        label: "Data1",
      }, {
        data: data2,
        label: "Data2",
      }],
      options);
});

通过设置 align: "center" 选项,您解决了问题 #2,并且您只得到一个标签,居中于栏下方。通过调整 barWidth 属性,您可以更改条形宽度。

你也可以在没有类别插件的情况下使用这些选项来做到这一点,主要是 barWidthtickSize:

    series: {
        bars: {
            show: true,
            barWidth: 15*24*60*60*1000, // 15 days, roughly half a month
            align: 'center'
        }
    },
    xaxis: {
        mode: "time",
        timeformat: "%m-%Y",
        tickSize: [1, 'month']
    }

Updated fiddle