Flot柱状图如何并列显示
来源:互联网 发布:人体工学椅子 知乎 编辑:程序博客网 时间:2024/05/07 23:41
jquery的flot画柱状图时,如果有多个数据源,柱子都重叠到一起了,像这样:
或者数据源之间align属性设置不一样时,“left”和“center”都存在时,柱状图会像这样:
纠结了吧?姐来给你展示一下高端操作!
1. 首先找到源码:jquery.flot.js 里的 function drawSeriesBars(series) { } 函数:
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(); }
2. 可以根据需求修改该函数中的以下代码片段:
由于姐有四根柱子,于是姐有了这样的操作:给属性 align 加了两个值,right1 和 left1 ,分别表示靠右向左排列的柱子和靠左向右排列的柱子。。。<表达不清楚了,反正就是左右各加一个柱子^o^!>
var barLeft; switch (series.bars.align) { case "left": barLeft = 0; break; case "right": barLeft = -series.bars.barWidth; break; case "right1": barLeft = -(series.bars.barWidth*2); break; case "left1": barLeft = series.bars.barWidth; break; default: barLeft = -series.bars.barWidth / 2; }
of course you can have better ideassssssssssssssssssss!
3. 给数据源中加入柱子的属性:
var dataset = [ { label: "预算金额", data: data1, color: "blue" , bars:{align:"right1", barWidth: 0.25}}, { label: "实际金额", data: data2, color: "yellow",bars:{align:"right", barWidth: 0.25} }, { label: "预算金额", data: data3, color: "green", bars:{align:"left", barWidth: 0.25}}, { label: "实际金额", data: data4, color: "red", bars:{align:"left1", barWidth: 0.25} }];
好了柱子就这样排好了,又有新问题啦,鼠标放上去悬浮还是原来的位置呀,这就尴尬了, 嗯 - - !
如何解决悬浮不准确的问题呢?我也不知道啊,我在研究研究去。。。。。
4. hover的相对位置还是默认的同样需要修改,要与对应的柱状图在同一位置:
在同一个js中找到function drawBarHighlight(series, point) {}函数,同样的代码改的和前面一样。
function drawBarHighlight(series, point) { var highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(), fillStyle = highlightColor, barLeft; switch (series.bars.align) { case "left": barLeft = 0; break; case "right": barLeft = -series.bars.barWidth; break; default: barLeft = -series.bars.barWidth / 2; } octx.lineWidth = series.bars.lineWidth; octx.strokeStyle = highlightColor; drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth); }
switch片段改为:
var barLeft; switch (series.bars.align) { case "left": barLeft = 0; break; case "right": barLeft = -series.bars.barWidth; break; case "right1": barLeft = -(series.bars.barWidth*2); break; case "left1": barLeft = series.bars.barWidth; break; default: barLeft = -series.bars.barWidth / 2; }
鼠标悬浮的时候,图高亮显示的是对了,但鼠标悬浮的位置还是老位置。。。又尴尬了。
最终,我放弃了flot,用我熟悉的 echarts 了。哈哈哈哈哈哈 ^o^ !!!!!!!!!
阅读全文
0 0
- Flot柱状图如何并列显示
- flot柱状图上显示数字
- Flot 在柱状图上显示数字
- 多个柱状图重叠显示问题 jQuery.flot
- jquery flot 画柱状图
- 利用 jquery flot 生成柱状图
- jquery.flot.js 之 柱状图
- html之如何让多个并列的div居中显示
- css如何让两个并列的按钮 水平居中显示
- css如何让两个并列的按钮 水平居中显示
- flot 自定义显示日期
- flot 自定义显示日期
- 两个div并列显示
- 两个div并列显示
- jquery 的柱状图,饼状图如何显示
- html 两个div并列显示
- html 两个div并列显示
- 如何画Flot折线图
- 使用GP处理制图中出现的路水关系冲突(当现状道路与水系发生压盖时,图面上要做一定距离的偏移)
- stm32入门之路
- 计算机组成原理概述
- 教你如何轻松玩转自媒体淘客,赚大钱!
- linnux一键安装PHP环境
- Flot柱状图如何并列显示
- android自定义WaveView水波纹控件
- java编程面试题
- 第二周项目 2—C/C++语言中函数参数传递的三种方式
- 页面滚动选中左侧导航栏之HelloWorld
- Mysql log文件之 relay log、master log info、relay log info
- 【Linux】使用yum命令在线安装JDK
- 集成融云的 踩到的坑。。。
- 数据结构第三周选择排序与快速排序差别