`
gavin
  • 浏览: 83477 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

Flotr纵轴刻度分颜色扩展

阅读更多
把纵轴刻度用两种颜色画出来。股票中有些图纵轴刻度标签会以昨收为中心,上下分为红绿两种颜色。Flotr有K线图,但轴不能设两种颜色,稍微改下就可以了。
改后的配置方法:
var options = {
	title: "熊猫烟花",
	colors: ['#C0D800', '#00A8F0', '#CB4B4B', '#4DA74D', '#9440ED'],
	xaxis: {ticks: json.ticks},
	yaxis:{ ticks: [1,2,3, 4,5,6, 7],//刻度,假数据,会分两种颜色
			close:4, //昨收,做为中线
			downcolor:'#00FF00',//下面颜色
			upcolor:'#FF0000'//上面颜色
			//其它配置略
	}
};
添加了close,downcolor,upcolor配置。修改原来的drawLabels函数,添加十来行代码。通常不想改下载下来的Flotr源码,只要在画图前执行了下面代码就行了。下面代码是把drawLabels函数拿出来改了下,在画图前执行了会替换原函数。
Flotr.Graph.implement({
	drawLabels: function(){		
		// Construct fixed width label boxes, which can be styled easily. 
		var noLabels = 0, axis,
		    xBoxWidth, i, html, tick, left, top,
		    options = this.options,
		    ctx = this.ctx,
		    a = this.axes;
		
		for(i = 0; i < a.x.ticks.length; ++i){
			if (a.x.ticks[i].label) {
				++noLabels;
			}
		}
		xBoxWidth = this.plotWidth / noLabels;
		
		if (options.grid.circular) {
			ctx.save();
			ctx.translate(this.plotOffset.left+this.plotWidth/2, this.plotOffset.top+this.plotHeight/2);
			var radius = this.plotHeight*options.radar.radiusRatio/2 + options.fontSize,
			    sides = this.axes.x.ticks.length,
					coeff = 2*(Math.PI/sides),
					angle = -Math.PI/2;
			
			var style = {
				size: options.fontSize
			};

			// Add x labels.
			axis = a.x;
			style.color = axis.options.color || options.grid.color;
			for(i = 0; i < axis.ticks.length && axis.options.showLabels; ++i){
				tick = axis.ticks[i];
				tick.label += '';
				if(!tick.label || tick.label.length == 0) continue;
				
				var x = Math.cos(i*coeff+angle) * radius, 
				    y = Math.sin(i*coeff+angle) * radius;
						
				style.angle = Flotr.toRad(axis.options.labelsAngle);
				style.valign = 'm';
				style.halign = (Math.abs(x) < 0.1 ? 'c' : (x < 0 ? 'r' : 'l'));

				ctx.drawText(tick.label, x, y, style);
			}
			
			// Add y labels.
			axis = a.y;
			style.color = axis.options.color || options.grid.color;
			for(i = 0; i < axis.ticks.length && axis.options.showLabels; ++i){
				tick = axis.ticks[i];
				tick.label += '';
				if(!tick.label || tick.label.length == 0) continue;
				
				style.angle = Flotr.toRad(axis.options.labelsAngle);
				style.valign = 'm';
				style.halign = 'l';
				
				ctx.drawText(tick.label, 3, -(axis.ticks[i].v / axis.max) * (radius - options.fontSize), style);
			}
			ctx.restore();
			return;
		}
    
		if (!options.HtmlText && this.textEnabled) {
			var style = {
				size: options.fontSize,
				adjustAlign: true
			};
	
			// Add x labels.
			axis = a.x;
			style.color = axis.options.color || options.grid.color;
			for(i = 0; i < axis.ticks.length && axis.options.showLabels && axis.used; ++i){
				tick = axis.ticks[i];
				if(!tick.label || tick.label.length == 0) continue;
				
				left = axis.d2p(tick.v);
				if (left < 0 || left > this.plotWidth) continue;
        
				style.angle = Flotr.toRad(axis.options.labelsAngle);
				style.halign = 'c';
				style.valign = 't';
				
				ctx.drawText(
					tick.label,
					this.plotOffset.left + left, 
					this.plotOffset.top + this.plotHeight + options.grid.labelMargin,
					style
				);
			}
			  
			// Add x2 labels.
			axis = a.x2;
			style.color = axis.options.color || options.grid.color;
			for(i = 0; i < axis.ticks.length && axis.options.showLabels && axis.used; ++i){
				tick = axis.ticks[i];
				if(!tick.label || tick.label.length == 0) continue;
        
				left = axis.d2p(tick.v);
				if(left < 0 || left > this.plotWidth) continue;
        
				style.angle = Flotr.toRad(axis.options.labelsAngle);
				style.halign = 'c';
				style.valign = 'b';
				
				ctx.drawText(
					tick.label,
					this.plotOffset.left + left, 
					this.plotOffset.top + options.grid.labelMargin,
					style
				);
			}
			  
			// Add y labels.
			axis = a.y;
			style.color = axis.options.color || options.grid.color;
			for(i = 0; i < axis.ticks.length && axis.options.showLabels && axis.used; ++i){
				tick = axis.ticks[i];
				if (!tick.label || tick.label.length == 0) continue;
        
				top = axis.d2p(tick.v);
				if(top < 0 || top > this.plotHeight) continue;
				
				style.angle = Flotr.toRad(axis.options.labelsAngle);
				style.halign = 'r';
				style.valign = 'm';
				
				ctx.drawText(
					tick.label,
					this.plotOffset.left - options.grid.labelMargin, 
					this.plotOffset.top + top,
					style
				);
			}
			  
			// Add y2 labels.
			axis = a.y2;
			style.color = axis.options.color || options.grid.color;
			for(i = 0; i < axis.ticks.length && axis.options.showLabels && axis.used; ++i){
				tick = axis.ticks[i];
				if (!tick.label || tick.label.length == 0) continue;
        
				top = axis.d2p(tick.v);
				if(top < 0 || top > this.plotHeight) continue;
        
				style.angle = Flotr.toRad(axis.options.labelsAngle);
				style.halign = 'l';
				style.valign = 'm';
				
				ctx.drawText(
					tick.label,
					this.plotOffset.left + this.plotWidth + options.grid.labelMargin, 
					this.plotOffset.top + top,
					style
				);
				
				ctx.save();
				ctx.strokeStyle = style.color;
				ctx.beginPath();
				ctx.moveTo(this.plotOffset.left + this.plotWidth - 8, this.plotOffset.top + axis.d2p(tick.v));
				ctx.lineTo(this.plotOffset.left + this.plotWidth,     this.plotOffset.top + axis.d2p(tick.v));
				ctx.stroke();
				ctx.restore();
			}
		} 
		else if (a.x.options.showLabels || a.x2.options.showLabels || a.y.options.showLabels || a.y2.options.showLabels) {
			html = ['<div style="font-size:smaller;color:' + options.grid.color + ';" class="flotr-labels">'];
			
			// Add x labels.
			axis = a.x;
			if (axis.options.showLabels){
				for(i = 0; i < axis.ticks.length; ++i){
					tick = axis.ticks[i];
					if(!tick.label || tick.label.length == 0 || 
					    (this.plotOffset.left + axis.d2p(tick.v) < 0) || 
					    (this.plotOffset.left + axis.d2p(tick.v) > this.canvasWidth)) continue;
					html.push('<div style="position:absolute;top:' + (this.plotOffset.top + this.plotHeight + options.grid.labelMargin) + 'px;left:' + (this.plotOffset.left +axis.d2p(tick.v) - xBoxWidth/2) + 'px;width:' + xBoxWidth + 'px;text-align:center;'+(axis.options.color?('color:'+axis.options.color+';'):'')+'" class="flotr-grid-label">' + tick.label + '</div>');
				}
			}
			
			// Add x2 labels.
			axis = a.x2;
			if (axis.options.showLabels && axis.used){
				for(i = 0; i < axis.ticks.length; ++i){
					tick = axis.ticks[i];
					if(!tick.label || tick.label.length == 0 || 
					    (this.plotOffset.left + axis.d2p(tick.v) < 0) || 
					    (this.plotOffset.left + axis.d2p(tick.v) > this.canvasWidth)) continue;
					html.push('<div style="position:absolute;top:' + (this.plotOffset.top - options.grid.labelMargin - axis.maxLabel.height) + 'px;left:' + (this.plotOffset.left + axis.d2p(tick.v) - xBoxWidth/2) + 'px;width:' + xBoxWidth + 'px;text-align:center;'+(axis.options.color?('color:'+axis.options.color+';'):'')+'" class="flotr-grid-label">' + tick.label + '</div>');
				}
			}
			
			// Add y labels.
			axis = a.y;
			if (axis.options.showLabels){
				var temp = axis.options.color;
				for(i = 0; i < axis.ticks.length; ++i){
					tick = axis.ticks[i];
					//
					if(axis.options.close > tick.v) {
						axis.options.color = axis.options.downcolor;
					}else if(axis.options.close < tick.v){
						axis.options.color = axis.options.upcolor ;
					}else{
						axis.options.color = temp;
					}
					if (!tick.label || tick.label.length == 0 ||
							 (this.plotOffset.top + axis.d2p(tick.v) < 0) || 
							 (this.plotOffset.top + axis.d2p(tick.v) > this.canvasHeight)) continue;
					html.push('<div style="position:absolute;top:' + (this.plotOffset.top + axis.d2p(tick.v) - axis.maxLabel.height/2) + 'px;left:0;width:' + (this.plotOffset.left - options.grid.labelMargin) + 'px;text-align:right;'+(axis.options.color?('color:'+axis.options.color+';'):'')+'" class="flotr-grid-label">' + tick.label + '</div>');
				}
				axis.options.color = temp;
			}
			
			// Add y2 labels.
			axis = a.y2;
			if (axis.options.showLabels && axis.used){
				ctx.save();
				ctx.strokeStyle = axis.options.color || options.grid.color;
				ctx.beginPath();
				
				for(i = 0; i < axis.ticks.length; ++i){
					tick = axis.ticks[i];
					if(axis.options.close > tick.v) {
						axis.options.color = axis.options.downcolor;
					}else if(axis.options.close < tick.v){
						axis.options.color = axis.options.upcolor ;
					}else{
						axis.options.color = ctx.strokeStyle;
					}
					if (!tick.label || tick.label.length == 0 ||
							 (this.plotOffset.top + axis.d2p(tick.v) < 0) || 
							 (this.plotOffset.top + axis.d2p(tick.v) > this.canvasHeight)) continue;
					html.push('<div style="position:absolute;top:' + (this.plotOffset.top + axis.d2p(tick.v) - axis.maxLabel.height/2) + 'px;right:0;width:' + (this.plotOffset.right - options.grid.labelMargin) + 'px;text-align:left;'+(axis.options.color?('color:'+axis.options.color+';'):'')+'" class="flotr-grid-label">' + tick.label + '</div>');

					ctx.moveTo(this.plotOffset.left + this.plotWidth - 8, this.plotOffset.top + axis.d2p(tick.v));
					ctx.lineTo(this.plotOffset.left + this.plotWidth,     this.plotOffset.top + axis.d2p(tick.v));
				}
				ctx.stroke();
				ctx.restore();
			}
			
			html.push('</div>');
			this.el.appendHTML(html.join(''));
		}
	}
});

分享到:
评论

相关推荐

    Flotr2开发库

    通过Flotr2,你可以轻松地调整颜色、样式、标记、轴刻度和标签,以适应不同的数据展示需求。 在性能方面,Flotr2优化了渲染过程,使其能够在大量数据集上运行流畅。它使用HTML5的Canvas元素进行绘制,确保了良好的...

    flotr2实例+文档

    Flotr2还提供了丰富的配置选项,比如你可以改变颜色、字体、轴的范围和刻度,甚至可以添加自定义的工具提示和图例。 总之,“flotr2实例+文档”是一个全面的学习资源,无论你是初学者还是经验丰富的开发者,都能...

    flotr2 绘图示例

    6. **颜色和样式**:用户可以控制图表的颜色方案,线条样式,填充颜色等,以满足设计需求。 7. **动画效果**:Flotr2可以为图表的更新和变化添加平滑的动画效果,使视觉表现更加生动。 在实际应用中,为了使用...

    flotr2绘图工具

    4. **自定义**:Flotr2允许开发者自定义图表的各个方面,包括颜色、字体、轴的刻度、图例、标题、背景等。此外,还可以设置数据点的形状、大小、标记样式等,以满足不同设计需求。 5. **性能优化**:Flotr2针对大量...

    flotr2.min.js 包 及简单例子

    在例子中,开发者可能会看到如何设置数据、选择图表类型、配置颜色、设置轴刻度以及添加图例等步骤。通过学习这个例子,初学者可以快速理解Flotr2的基本用法,并将其应用到自己的项目中。 **官方Demo地址** Flotr2...

    Flotr2图形插件

    Flotr2提供了大量的配置选项,允许你定制图表的各个方面,如颜色、轴、网格、图例等。例如,你可以更改轴的标签、范围和刻度,或者调整图表的背景色: ```javascript var options = { xaxis: {min: 0, max: 4}, ...

    Flotr2.zip

    一个JavaScript绘图和制表的图形类库,可以有效地帮助你绘制基于HTML5的图表和图形,包括线图、柱状图、饼图、气泡图等等,对于浏览器的兼容性...压缩包包含一份Flotr2.js和它的压缩版本Flotr2.min.js。可以放心下载。

    android 调用js flotr2曲线图

    本篇文章将详细介绍如何在Android中调用JavaScript库Flotr2来绘制这些图形。 Flotr2是一个强大的JavaScript图表库,它提供了丰富的图表类型和高度可定制的选项,使得在Web端绘制图表变得简单。在Android应用中,...

    flotr2 js图表控件

    Flotr2 是一个用于绘制 HTML5 图形和图表的开源 JS 库,是 flotr 的分支,但移除了 Prototype 的依赖以及其他方面很多改进。

    Flotr2-master.zip

    Flotr2 是一个用于绘制 HTML5 图形和图表的开源 JS 库,是 flotr 的分支,但移除了 Prototype 的依赖以及其他方面很多改进

    flotr 0.2 Prototype 曲线图插件.zip

    使用Flotr,开发者可以通过简单的API调用来设置图形的属性,如颜色、数据点、轴标签等,从而创建出具有专业外观的图表。 总结来说,"flotr 0.2 Prototype 曲线图插件.zip" 提供了一种基于JavaScript和CSS3的技术...

    JavaScript数据可视化编程Flotr

    flotr ,资源分 原本想设置0的,可是不知为何最小是1分,难道改革了么, /小纠结 /小纠结 /小纠结 /小纠结 /小纠结 /小纠结 /小纠结 /小纠结 /小纠结

    Javascript实现的UI图形包Flotr

    Flotr,http://solutoire.com/flotr/ 一个基于Canvas的Javascript图形包, 兼容IE8+,Google Chrome,Firefox。 可实现类似Windows资源显示器的cpu,memory类动态资源图,包括Line, Pie, Bar chart等。

    js绘图工具之二 jqflot

    除了内置的图表类型,jqPlot还支持自定义插件,允许开发者扩展其功能,满足特定需求。你可以编写JavaScript代码来定义新的图表类型或修改现有行为。 **总结** jqPlot是一个强大的JavaScript绘图工具,它提供了丰富...

    JavaScript数据可视化编程

    使用JavaScript实现不同常规的可视化 使用FLOTR2进行 数据可视化 编程

    android和各种图表的数据交互

    demo展示了android如何使用各种图表,其中包括折线图和饼图,图表类型有 echarts flotr2 highcharts jqplot四种,其中highcharts是收费的,echarts视频效果最棒,不过可能手机型号不同会出现些异常,比如背景变黑

    Web Chart 极品web报表控件收集Web+Chart

    Flotr - Flotr 是Prototype 1.6.0.2框架的javascript插件库。 Flotr帮助你在浏览器中创建图表,支持鼠标事件响应,放大缩小,CSS类型支持等。 PHP/SWF Charts - PHP/SWF 是一个简单支持web图表的强大工具,你能...

    Chart 极品web报表控件收集(Flot,AmCharts, Emprise JavaScript Charts...)

    • Flotr - Flotr 是Prototype 1.6.0.2框架的javascript插件库。 Flotr帮助你在浏览器中创建图表,支持鼠标事件响应,放大缩小,CSS类型支持等。 PHP/SWF Charts - PHP/SWF 是一个简单支持web图表的强大工具,你...

    大数据量科学计算数据的动态Web可视化.pdf

    比较优秀的JavaScript图表工具有Flotr JavaScript Plotting Library(Flotr)、Empriese JavaScript Charts(EJSChart)等。利用这些框架可以用很简单的语法实现美观的图表,支持大多数浏览器,并且具有丰富的图表...

    打包js,jquery插件

    6. **Flotr2**:Flotr2是一个轻量级的JavaScript图表库,基于HTML5 canvas,支持多种图表类型,如折线图、柱状图、饼图等,适合在Web应用中展示数据。 7. **JSON**:JSON(JavaScript Object Notation)是一种轻量...

Global site tag (gtag.js) - Google Analytics