最近在用jquery的flot画图,折线图饼图都没啥问题,一到柱状图就来事了,如果多个数据源,柱子都重叠到一起了,像这样:
度娘谷哥搜了一大圈,找了一个插件,专门处理这种情况的,但是郁闷的调了半天愣是没反应,该什么样还什么样,眼看工期将至,一咬牙,看源码吧。原来这个插件是在动态调整每个bar的barLeft属性,见代码红色处(jquery.flot.multibar.js):
(function ($) {
function init(plot) {
var multiple = true;
var sArray = [];
var totWidth = 0;
function procRawData(plot, series, data, datapoints) {
if(series.bars.show) {
sArray.push(series);
}
}
function procDatapoints(plot, series, datapoints) {
//Ensure we only process these once
if(series.bars.show && series.bars.barLeft==undefined) {
if(totWidth==0) {
for(var j = 0; j < sArray.length; j++) {
totWidth+=sArray[j].bars.barWidth;
}
}
var runWidth=0;
for(var k = 0; k < sArray.length; k++) {
s=sArray[k];
if(s==series) {
break;
}
runWidth+=s.bars.barWidth;
}
series.bars.barLeft = runWidth-(totWidth/2);
}
}
function checkMultipleBarsEnabled(plot, options) {
if (options.multiplebars) {
multiple = options.multiplebars;
sArray=[];
totWidth=0;
plot.hooks.processRawData.push(procRawData);
plot.hooks.processDatapoints.push(procDatapoints);
}
}
plot.hooks.processOptions.push(checkMultipleBarsEnabled);
}
var options = { multiplebars: true };
$.plot.plugins.push({
init: init,
options: options,
name: "multiplebars",
version: "0.1"
});
})(jQuery);
但是可恶的是,jquery.flot.js自己却重新给barLeft赋值了,见红色代码(jquery.flot.js):
function drawSeriesBars(series) {
function plotBars(datapoints, barLeft, barRight, fillStyleCallback, axisx, axisy) {
var points = datapoints.points, ps = datapoints.pointsize;
for (var i = 0; i < points.length; i += ps) {
if (points[i] == null)
continue;
drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);
}
}
ctx.save();
ctx.translate(plotOffset.left, plotOffset.top);
// FIXME: figure out a way to add shadows (for instance along the right edge)
ctx.lineWidth = series.bars.lineWidth;
ctx.strokeStyle = series.color;
var barLeft;
switch (series.bars.align) {
case "left":
barLeft = 0;
break;
case "right":
barLeft = -series.bars.barWidth;
break;
default:
barLeft = -series.bars.barWidth / 2;
}
var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;
plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, fillStyleCallback, series.xaxis, series.yaxis);
ctx.restore();
}
所以,果断的加上判断,要用bars自己的barLeft:
function drawSeriesBars(series) {
function plotBars(datapoints, barLeft, barRight, fillStyleCallback, axisx, axisy) {
var points = datapoints.points, ps = datapoints.pointsize;
for (var i = 0; i < points.length; i += ps) {
if (points[i] == null)
continue;
drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);
}
}
ctx.save();
ctx.translate(plotOffset.left, plotOffset.top);
// FIXME: figure out a way to add shadows (for instance along the right edge)
ctx.lineWidth = series.bars.lineWidth;
ctx.strokeStyle = series.color;
var barLeft;
if(series.bars.barLeft != undefined){
barLeft = series.bars.barLeft;
}else{
switch (series.bars.align) {
case "left":
barLeft = 0;
break;
case "right":
barLeft = -series.bars.barWidth;
break;
default:
barLeft = -series.bars.barWidth / 2;
}
}
var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;
plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, fillStyleCallback, series.xaxis, series.yaxis);
ctx.restore();
}
终于显示成如下样子了:
相关推荐
jQuery Flot 是一个用于在网页上绘制高质量图形的开源库,它基于 jQuery,因此易于集成到任何使用 jQuery 的项目中。这个库提供了丰富的选项和插件,可以创建出各种各样的图表,包括折线图、柱状图、饼图等。在本文...
`jQuery Flot` 是一个基于 jQuery 的开源图表库,它允许开发者轻松地在网页上创建出各种复杂的图形,包括折线图、柱状图、饼图等。在本实例中,我们将关注如何使用 `jQuery Flot` 实现实时更新的折线图。实时更新的...
- **bars**:改进柱状图显示,支持水平柱状图。 - **stack**:实现堆叠图,方便对比各组数据的总和。 - **cursor**:添加鼠标光标,展示当前坐标值。 - **selection**:允许用户通过拖动选择图表区域,进行数据聚焦...
首先,jQuery Flot是一款基于jQuery的开源图表库,它通过简单的API接口,让开发者可以轻松地在网页上绘制各种类型的图表,包括线图、饼图、柱状图等。对于时间序列数据,Flot特别擅长处理,因为它提供了对时间轴的...
jQuery flot API文档 中文版 以下是从给定的文件信息中生成的相关知识点: 1. jQuery flot API的plot函数调用方法: var plot = $.plot(placeholder, data, options) 其中,placeholder可以是JQuery对象、DOM...
Flot支持多种图表类型,包括线条图(lines)、折线图(points)、柱状图(bars)以及饼图(pie)。每种图表都有不同的配置选项,可以通过设置`series`参数来调整。 **3. 数据格式** Flot接受两种基本的数据格式:...
1. **多种图表类型**:Flot 支持绘制线图、面积图、柱状图、饼图等多种常见的图表类型,能够满足大部分数据展示的需求。 2. **实时更新**:由于 Flot 基于 JavaScript,它可以实现实时数据更新,这在监控系统、数据...
Flot支持绘制多种类型的图表,包括折线图、柱状图、饼图、面积图、散点图等,涵盖了数据可视化的主要需求。此外,还可以通过组合不同的图表类型,实现更复杂的可视化效果。 ### 6. 扩展性和社区支持 Flot拥有活跃...
- **Flot**:作为jQuery的一个插件,Flot专门用于生成各种类型的图表,如折线图、柱状图、饼图等,支持时间序列数据和实时更新的数据流。 2. **特性** - **高效性能**:Flot利用HTML5的canvas元素进行绘图,提供...
1. **基本概念**:jQuery Flot是用纯JavaScript编写的,它可以生成线图、饼图、面积图、柱状图等多种图形。它支持实时数据更新,适合于动态展示数据变化的情况,如股票价格或者传感器读数。 2. **安装与引入**:...
Flot类库基于jQuery,支持绘制实时和可进行交互的图表
Flot提供了多种图表类型,包括折线图、柱状图、饼图以及面积图等,这些图表类型能够满足大部分数据可视化的基础需求。通过简单的配置选项,你可以定制图表的颜色、线条样式、标记点、轴的范围和刻度等,以达到理想的...
**jQuery Flot Pyramid Master** 是一个基于 jQuery 的数据可视化库,专门用于创建金字塔图表。Flot 是一个流行的、开源的 JavaScript 图表库,它利用 HTML5 的 Canvas 元素来绘制图表,支持多种类型的图表,如线图...
jQuery Flot 是一个基于jQuery的开源图形库,它允许开发者用纯JavaScript在网页上绘制各种类型的图表,包括线图、条形图、饼图和堆栈图等。其优点在于简单易用的API和良好的浏览器兼容性。 ### 二、Flot 堆栈图绘制...
Flot社区提供了许多插件,如时间轴支持(`jquery.flot.time.js`)、图像数据(`jquery.flot.image.js`)和堆积图(`jquery.flot.stack.js`)。根据项目需求,可以引入并使用这些插件以扩展Flot的功能。 ### 8. **...
Flot允许开发人员在网页上以动态、交互式的方式展示各种类型的数据,包括折线图、柱状图、饼图等,从而帮助用户更好地理解和分析数据。 ### Flot的特点 1. **轻量级**:Flot库的大小相对较小,加载速度快,对网页...
jquery.flot.axislabels.js
3. **多样化图表类型**:Flot提供了多种图表类型,如折线图、柱状图、饼图、散点图等,满足了各种数据展示的需求。此外,还支持组合图表,可以在同一图表上混合显示不同类型的图。 4. **实时更新**:Flot支持动态...
接下来是jQuery Flot,这是一个轻量级的JavaScript库,用于创建各种类型的图表,如折线图、柱状图和饼图等。Flot具有良好的性能和灵活性,可以轻松定制图表样式和交互性。在我们的示例中,Flot将用于接收SignalR推送...
折线图可以有多个数据系列,每个系列以不同颜色区分,支持添加网格线、数据点标记和时间轴,使得动态数据的演变一目了然。 在提供的压缩包中,`index.htm`很可能是示例代码的入口文件,它包含了HTML结构和引入的...