XCL-Chart柱形图的期望线/分界线

     周日在柱形图上加了两个小功能,当中之中的一个是加上了期望线/分界线,功能非常小,但我个人非常喜欢这个功能(好像之前也没看到别的图表库原生支持这个。)

主要是加上这些小小的横线后,能非常明显的区分出数据的层次。通过柱形与线的对照。能够一下就知道,眼下处于什么层次或阶级。

    这样的功能在强调某个底线或分级时特别有感觉。比方,销售人员的销售底线,价格的红线等,在商业报表中表强调时应当非常实用。只是我在Demo中是举了个考试成绩的柱形图。

虽不那么商业化,但应当能够比較让人好理解这个线的意义所在。

    图例如以下:


   附上XCL-Charts实现此图的代码:

package com.demo.xclcharts.view;

import java.text.DecimalFormat;
import java.util.LinkedList;
import java.util.List;

import org.xclcharts.chart.BarChart;
import org.xclcharts.chart.BarData;
import org.xclcharts.chart.DesireLineData;
import org.xclcharts.common.IFormatterDoubleCallBack;
import org.xclcharts.common.IFormatterTextCallBack;
import org.xclcharts.renderer.XEnum;

import android.content.Context;
import android.graphics.Color;

public class BarChart03View extends GraphicalView {
	
	//标签轴
	private List<String> chartLabels = new LinkedList<String>();
	private List<BarData> chartData = new LinkedList<BarData>();
	private List<DesireLineData> mDesireLineDataSet = new LinkedList<DesireLineData>();
	
	public BarChart03View(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		chartLabels();
		chartDataSet();
		chartDesireLines();
		chartRender();
		
	}
	
	private void chartRender()
	{
		try {
			
			BarChart chart = new BarChart();
			//图所占范围大小
			chart.setChartRange(0.0f, 0.0f, getScreenWidth(),getScreenHeight());
			chart.setCanvas(this.mCacheCanvas);
			if(chart.isVerticalScreen())
			{
				chart.setPadding(15, 20, 8, 10);
			}else{
				chart.setPadding(20, 20, 10, 8);
			}
					
			//标题
			chart.setChartTitle("小小熊 - 期末考试成绩");
			chart.setChartSubTitle("(XCL-Charts Demo)");	
			//数据源
			chart.setDataSource(chartData);
			chart.setLabels(chartLabels);	
			chart.setDesireLines(mDesireLineDataSet);
			
			//图例
			chart.getLegend().setLeftLegend("分数");
			chart.getLegend().setLowerLegend("科目");
			
			//数据轴
			chart.getDataAxis().setAxisMax(100);
			chart.getDataAxis().setAxisMin(0);
			chart.getDataAxis().setAxisSteps(5);		
			//指隔多少个轴刻度(即细刻度)后为主刻度
			chart.getDataAxis().setDetailModeSteps(4);
			
			//背景网格
			chart.getPlotGrid().setHorizontalLinesVisible(true);
									
			//横向显示柱形,如想看横向显示效果,可打开这两行的凝视就可以
			//chart.setChartDirection(XEnum.Direction.HORIZONTAL);
			//chart.getPlotGrid().setVerticalLinesVisible(true);
			
			//定义数据轴标签显示格式
			chart.getDataAxis().setLabelFormatter(new IFormatterTextCallBack(){
	
				@Override
				public String textFormatter(String value) {
					// TODO Auto-generated method stub		
					Double tmp = Double.parseDouble(value);
					DecimalFormat df=new DecimalFormat("#0");
					String label = df.format(tmp).toString();				
					return (label);
				}
				
			});
			
			
			//在柱形顶部显示值
			chart.getBar().setItemLabelsVisible(true);
			//设定格式
			chart.setItemLabelFormatter(new IFormatterDoubleCallBack() {
				@Override
				public String doubleFormatter(Double value) {
					// TODO Auto-generated method stub
					DecimalFormat df=new DecimalFormat("#0");					 
					String label = df.format(value).toString();
					return label;
				}});
			
			//隐藏Key
			chart.setPlotKeyVisible(false);
			//绘制图
			chart.render();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	private void chartDataSet()
	{
		//标签相应的柱形数据集
		List<Double> dataSeriesA= new LinkedList<Double>();	
		dataSeriesA.add(98d); 
		dataSeriesA.add(100d); 
		dataSeriesA.add(95d); 
		dataSeriesA.add(100d); 
		BarData BarDataA = new BarData("",dataSeriesA,(int)Color.rgb(53, 169, 239));
		
		
		chartData.add(BarDataA);
	}
	
	private void chartLabels()
	{
		chartLabels.add("语文"); 
		chartLabels.add("数学"); 
		chartLabels.add("英语"); 
		chartLabels.add("计算机"); 
	}	
	
	/**
	 * 期望线/分界线
	 */
	private void chartDesireLines()
	{				
		mDesireLineDataSet.add(new DesireLineData("及格线",60d,(int)Color.RED,7));		
		mDesireLineDataSet.add(new DesireLineData("优秀",90d,(int)Color.rgb(35, 172, 57),5));		
	}
	
}
  从代码中能够看出。与样例中其他的柱形图不同,在设置数据源时,我多设置了一个数据源:

//数据源
			chart.setDataSource(chartData);
			chart.setLabels(chartLabels);	
			chart.setDesireLines(mDesireLineDataSet);
即除了数据轴与标签轴的数据源以外。还设置了期望线的数据源。 而期望线由四个參数构成。

mDesireLineDataSet.add(new DesireLineData("及格线",60d,(int)Color.RED,7));		
		mDesireLineDataSet.add(new DesireLineData("优秀",90d,(int)Color.rgb(35, 172, 57),5));
: 用于标识线的意义,为""则不显示

         值 :用来与数据轴的值进行对照,来确认显示位置

颜色 :线的颜色

线的粗细:能够在特别强调时,与颜色配合来让人醒目。


     这仅仅是每条线各自的属性,实现上,通过"chart.getDesireLinePaint()",能够得到线的画笔类,在上面设置透明度等等效果。

关注的能够试一下这个小功能。

XCL-Charts地址在"写的Android图表库XCL-Charts,整理好如今开源了!!!"中有写.


MAIL: xcl_168@aliyun.com

BLOG:http://blog.csdn.net/xcl168






   

posted @ 2017-06-19 15:01  yfceshi  阅读(723)  评论(0编辑  收藏  举报