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

Javascript Flot折线图时间xaxis系列固定标签,javascript,jquery,charts,flot,Javascript,Jquery,Charts,Flot,我想创建一个带有时间xaxis系列的flot折线图,它将始终具有固定数量的标签,即6。这6个标签将在3年内每年减半。例如,标签可以是2016年1月、2016年6月、2017年1月、2017年6月、2019年1月、2018年6月。在这里,可以根据当前日期更改年份,但月份是固定的。现在,这些标签基于图表的数据显示。因此,我的数据在2017年1月至2018年7月期间没有任何价值,因为它们没有出现。此外,如果存在单个数据,则不会显示xaxis标签 那么,无论数据是什么,我怎么能在任何时候都有六个标签呢

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

那么,无论数据是什么,我怎么能在任何时候都有六个标签呢

我附上两个例子。其中一个只有一个值,因此它不会显示xaxis标签,第二个示例有多个点,因此也不会显示所有标签

var flotLineOption={ 系列:{ 线路:{ 秀:没错, 填充:0.01 }, 要点:{ 秀:没错, 半径:4 } }, 网格:{ 边框颜色:“eee”, 边框宽度:1, 悬停:是的, 背景颜色:“FCFC”, 边距:{底部:50} }, 提示:正确, 工具提示:{ 内容:功能标签,x,y{ var objDate=新日期; var yearValue=objDate.getFullYear; objDate=new Datex.setmonthbojdate.getMonth-1; var monthName=new DateobjDate.toLocaleStringen-us,{month:short}; 返回monthName++yearValue+':'+y; } }, xaxis:{ tickColor:‘eee’, 小数点:0, 尺寸:6, 秀:没错, 模式:时间, 时间格式:%b%y, 勾号:[新日期2017,1.getTime,新日期2017,6.getTime,新日期2018,1.getTime,新日期2018,6.getTime,新日期2019,1.getTime,新日期2019,6.getTime] }, 亚克斯:{ 位置:'左', tickColor:‘eee’, 小数点:0 }, 阴影大小:0 }; 函数getData{ var数据=[]; data.push[new Date2017,2.getTime,8] data.push[new Date2017,8.getTime,2] data.push[new Date2018,3.getTime,9] data.push[new Date2018,9.getTime,3] data.push[新日期2019,4.getTime,7] 返回数据; } $function{ $.plot$flotcontainer, [ {data:getData} ], flotLineOption ; $.plot$flotcontainer1, [ {数据:[[new Date2017,4.getTime,7]] ], flotLineOption ; }; 絮状容器{ 宽度:600px; 高度:200px; 文本对齐:居中; 保证金:0自动; } 絮状容器1{ 宽度:600px; 高度:200px; 文本对齐:居中; 保证金:50px自动0自动; }
Flot在第一个数据点开始图表,在最后一个数据点结束图表。这会导致你的刻度超出图表范围。设置x轴的最小值和最大值以显示所有记号:

xaxis: {
    //other options
    min: new Date(2017, 1).getTime(),
    max: new Date(2019, 6).getTime()
}
var flotLineOption={ 系列:{ 线路:{ 秀:没错, 填充:0.01 }, 要点:{ 秀:没错, 半径:4 } }, 网格:{ 边框颜色:“eee”, 边框宽度:1, 悬停:是的, 背景颜色:“FCFC”, 保证金:{ 底数:50 } }, 提示:正确, 工具提示:{ 内容:功能标签,x,y{ var objDate=新日期; var yearValue=objDate.getFullYear; objDate=new Datex.setmonthbojdate.getMonth-1; var monthName=new DateobjDate.toLocaleStringen-us{ 月份:短 }; 返回monthName++yearValue+':'+y; } }, xaxis:{ tickColor:‘eee’, 小数点:0, 尺寸:6, 秀:没错, 模式:时间, 时间格式:%b%y, 勾号:[新日期2017,1.getTime,新日期2017,6.getTime,新日期2018,1.getTime,新日期2018,6.getTime,新日期2019,1.getTime,新日期2019,6.getTime], 分钟:新日期2017年1月1日, 马克斯:新日期2019年6月1日 }, 亚克斯:{ 位置:'左', tickColor:‘eee’, 小数点:0 }, 阴影大小:0 }; 函数getData{ var数据=[]; data.push[new Date2017,2.getTime,8] data.push[new Date2017,8.getTime,2] data.push[new Date2018,3.getTime,9] data.push[new Date2018,9.getTime,3] data.push[新日期2019,4.getTime,7] 返回数据; } $function{ $.plot$flotcontainer[{ 数据:getData }], flotLineOption ; $.plot$flotcontainer1[{ 数据:[ [新日期2017年4月7日] ] }], flotLineOption ; }; 絮状容器{ 宽度:600px; 高度:200px; 文本对齐:居中; 保证金:0自动; } 絮状容器1{ 宽度:600px; 高度:200px; 文本对齐:居中; 保证金:50px自动0自动; }
在搜索时,我偶然发现了一个空白。如果将其值设置为偶数0.00001,则显示所有标签。那么,哪种解决方案更好呢?您是对的,autoscaleMargin也可以工作,而且更简单,因为您不必像更改最小/最大值那样更改它。