图表-折线图的实现

1、画坐标系

  使用CAShapeLayer画坐标系的每一根虚线:

  CAShapeLayer *shapeLayer = [CAShapeLayer layer];

[shapeLayer setBounds:self.bounds];

[shapeLayer setPosition:CGPointMake(CGRectGetWidth(self.frame) / 2, CGRectGetHeight(self.frame))];

[shapeLayer setFillColor:[UIColor clearColor].CGColor];

//  设置虚线颜色为blackColor

[shapeLayer setStrokeColor:lineColor.CGColor];

//  设置虚线宽度

[shapeLayer setLineWidth:CGRectGetHeight(self.frame)];

[shapeLayer setLineJoin:kCALineJoinMiter];

//  设置线宽,线间距

[shapeLayer setLineDashPattern:[NSArray arrayWithObjects:[NSNumber numberWithInt:lineLength], [NSNumber numberWithInt:lineSpacing], nil]];

//  设置路径

CGMutablePathRef path = CGPathCreateMutable();

CGPathMoveToPoint(path, NULL, 0, 0);

CGPathAddLineToPoint(path, NULL, CGRectGetWidth(self.frame), 0);

[shapeLayer setPath:path];

CGPathRelease(path);

//  把绘制好的虚线添加上来

[self.layer addSublayer:shapeLayer];

2、画点连线

  根据数据源中的数据计算每个点在当前图表视图的的坐标位置,使用UIBezierPath设置路径并使用CAShapeLayer连点成线:

  for (NSInteger i = 0; i < self.dataArr.count; i++) {

  NSArray *array = self.dataArr[i];

  UIBezierPath *path = [UIBezierPath bezierPath];

  for (NSInteger i = 0; i < array.count; i++) {

ChartModel *chart = [array objectAtIndex:i];

CGPoint point = [self getPointWithChart:chart];

if (i == 0) {

  [path moveToPoint:point];

}else {

  [path addLineToPoint:point];

}

}

CAShapeLayer *pathLayer = [CAShapeLayer layer];

pathLayer.frame = CGRectMake(0, 0, _kWidth, _kHeight);

pathLayer.path = path.CGPath;

pathLayer.strokeColor = ((UIColor *)[self.colorArr objectAtIndex:i]).CGColor;

pathLayer.fillColor = nil;

pathLayer.lineWidth = 1.5;

pathLayer.lineJoin = kCALineJoinRound;

[self.layer addSublayer:pathLayer];

}

  示例:

  

  github地址:https://github.com/lionskl/KLChartView.git  

时间: 2024-12-15 04:59:07

图表-折线图的实现的相关文章

RDLC报表系列(六) 多图表-折线图和柱状图

美好的一天开始了,这篇是RDLC系列的最后一篇文章,我的小项目也已经release,正在测试中. 1.新建demo3.aspx和demo3.rdlc文件 2.往rdlc文件中拖一个图标控件,在弹出的窗口中选择某一类“柱状图”,点击确定 3.在底部的“将类别字段拖至此处”区域选择你要分类的字段,这里为[FiscalMonth] 4.在上面的“将数据字段拖至此处”区域选择你要显示的数据字段,并将函数Count改为Sum,这里[Sum(Actual)]和[Sum(Budget)]. 5.在[Sum(B

图表------折线图

@layout("/common/_container.html"){<div class="ibox float-e-margins"> <div class="ibox-content"> <h3 style="text-align:center;color:red;" id="ts"></h3> <div class="form-hori

iOS:使用贝塞尔曲线绘制图表(折线图、柱状图、饼状图)

1.介绍: UIBezierPath :画贝塞尔曲线的path类 UIBezierPath定义 : 贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度. 曲线的定义有四个点:起始点.终止点(也称锚点)以及两个相互分离的中间点. 滑动两个中间点,贝塞尔曲线的形状会发生变化. UIBezierPath :对象是CGPathRef数据类型的封装,可以方便的让我们画出 矩形 . 椭圆 或者 直线和曲线的组合形状 初始化方法: + (instancetype)bezierPath; /

手把手教你实现折线图之------安卓最好用的图表库hellocharts之最详细的使用介绍

因为项目需要搞一个折线图,按照日期显示相应的成绩,所以有了本文. 以前用过一次XCL-chart,但是感觉只适合固定图表,不去滑动的那种,因为你一滑动太卡了你懂得(毕竟作者好久没更新优化了),拙言大神我开玩笑的 ,毕竟我加你的群大半年了 - - 第二研究了一下achartenginee图表框架,一不美观,二 achartenginee的可定制性实在不敢恭维,做出来的图表根本不能满足需求 再试了一次网传最好用的MPchart和hellochart同一年出来的,但是要比hellochaet早点.说实

安卓图表引擎AChartEngine(四) - 源码示例 嵌入Acitivity中的折线图

前面几篇博客中都是调用ChartFactory.get***Intent()方法,本节讲的内容调用ChartFactory.get***View()方法,这个方法调用的结果可以嵌入到任何一个Activity中,作为Activity的一部分. XYChartBuilder.java(源码分析见注释) [java] view plaincopy package org.achartengine.chartdemo.demo.chart; import java.io.File; import jav

安卓图表引擎AChartEngine(三) - 示例源码折线图、饼图和柱状图

折线图: [java] view plaincopy package org.achartengine.chartdemo.demo.chart; import java.util.ArrayList; import java.util.List; import org.achartengine.ChartFactory; import org.achartengine.chart.PointStyle; import org.achartengine.renderer.XYMultipleSe

MPAndroidChart开源图表库---折线图

项目地址:点击打开,原文参考地址:点击打开 1. 将mpandroidchartlibrary-2-0-8.jar包copy到项目的libs中 2. 定义xml文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=

HelloCharts开源图表库(一)之折线图

之前我们介绍了开源图表库MPAndriodChart,请参考http://blog.csdn.net/shineflowers/article/details/44704723. 我们今天介绍的将是一个更为优秀的图表库,比MPAndroidChart性能更好,功能更完善,UI风格更美观,坐标轴更精细. 支持缩放.滑动以及平移.Zoom(pinch to zoom, double tap zoom), scroll and fling 支持自定义坐标轴(比如坐标轴位置:上下左右内部),支持自动生成

MPAndroidChart开源图表库之折线图

参考:http://blog.csdn.net/shineflowers/article/details/44704723 1.在布局文件中加入组件 <com.github.mikephil.charting.charts.LineChart android:id="@+id/char1" android:layout_width="match_parent" android:layout_height="match_parent" and