iOS AAChartKit 图表库的使用

Posted 长沙火山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS AAChartKit 图表库的使用相关的知识,希望对你有一定的参考价值。

一、介绍

AAChartKit 项目,是AAInfographics的 Objective-C 语言版本,是在流行的开源前端图表库Highcharts的基础上,封装的面向对象的,一组简单易用,极其精美的图表绘制控件。

  • 环境友好,兼容性强. 适配 ios 8+, 支持iOS、 iPad OS、macOS, 支持 Objective-C语言, 同时更有 Swift 语言版本 AAInfographics 、 Java 语言版本 AAChartCore 、Kotlin 语言版本 AAChartCore-Kotlin 可供使用, 配置导入工程简单易操作。
  • 功能强大,类型多样 。支持柱状图 、条形图 、折线图 、曲线图 、折线填充图 、曲线填充图、雷达图、极地图、扇形图、气泡图、散点图、区域范围图、柱形范围图、面积范围图、面积范围均线图、直方折线图、直方折线填充图、箱线图、瀑布图、热力图、桑基图、金字塔图、漏斗图、等二十几种类型的图形,不可谓之不多。

GitHub地址:https://github.com/AAChartModel/AAChartKit/blob/master

二、基础用法

根据官方文档的介绍,实现一个最简单的图表,代码如下:

#import "ColumnChartController.h"
#import "AAChartKit.h"

@interface ColumnChartController ()<AAChartViewEventDelegate>

@end

@implementation ColumnChartController

- (void)viewDidLoad 
    [super viewDidLoad];
    
    self.title = @"Column Chart 柱状图";
    
    // 1.创建视图AAChartView
    CGFloat chartViewWidth  = self.view.frame.size.width;
    CGFloat chartViewHeight = self.view.frame.size.height - 250;
    AAChartView *chartView = [[AAChartView alloc]init];
    chartView.delegate = self;
    chartView.frame = CGRectMake(0, 60, chartViewWidth, chartViewHeight);
    禁用 AAChartView 滚动效果(默认不禁用)
    //self.aaChartView.scrollEnabled = NO;
    [self.view addSubview:chartView];
    
    // 2.配置视图模型AAChartModel
    AAChartModel *aaChartModel = AAChartModel.new
    .chartTypeSet(AAChartTypeArea)//设置图表的类型(这里以设置的为折线面积图为例)
    .titleSet(@"编程语言热度")//设置图表标题
    .subtitleSet(@"虚拟数据")//设置图表副标题
    .categoriesSet(@[@"Java",@"Swift",@"Python",@"Ruby", @"php",@"Go",@"C",@"C#",@"C++"])//图表横轴的内容
    .yAxisTitleSet(@"摄氏度")//设置图表 y 轴的单位
    .seriesSet(@[
        AASeriesElement.new
            .nameSet(@"2017")
            .dataSet(@[@7.0, @6.9, @9.5, @14.5, @18.2, @21.5, @25.2, @26.5, @23.3, @18.3, @13.9, @9.6]),
        AASeriesElement.new
            .nameSet(@"2018")
            .dataSet(@[@0.2, @0.8, @5.7, @11.3, @17.0, @22.0, @24.8, @24.1, @20.1, @14.1, @8.6, @2.5]),
        AASeriesElement.new
            .nameSet(@"2019")
            .dataSet(@[@0.9, @0.6, @3.5, @8.4, @13.5, @17.0, @18.6, @17.9, @14.3, @9.0, @3.9, @1.0]),
        AASeriesElement.new
            .nameSet(@"2020")
            .dataSet(@[@3.9, @4.2, @5.7, @8.5, @11.9, @15.2, @17.0, @16.6, @14.2, @10.3, @6.6, @4.8]),
    ]);
    
    // 3.图表视图对象调用图表模型对象,绘制最终图形
    [chartView aa_drawChartWithChartModel:aaChartModel];
    
//    /*仅仅更新 AAChartModel 对象的 series 属性时,动态刷新图表*/
//    [chartView aa_onlyRefreshTheChartDataWithChartModelSeries:aaChartModelSeriesArray];
//
//    /*更新 AAChartModel 内容之后,刷新图表*/
//    [chartView aa_refreshChartWithChartModel:aaChartModel];



//实现对 AAChartView 事件代理的监听
 #pragma mark -- AAChartView delegate
 - (void)aaChartView:(AAChartView *)aaChartView moveOverEventWithMessage:(AAMoveOverEventMessageModel *)message 
 NSLog(@"🚀selected point series element name: %@",message.name);
 

@end

效果图:

三、自定义用法

根据项目自己的需求,实现一个最简单的图表,代码如下:

#import "ColumnMonthController.h"
#import "AAChartKit.h"

@interface ColumnMonthController ()<AAChartViewEventDelegate>

@property (nonatomic, strong) AAChartModel *aaChartModel;
@property (nonatomic, strong) AAChartView  *aaChartView;

@property (nonatomic, strong) UILabel  *tipLab;

@end

@implementation ColumnMonthController

- (void)viewDidLoad 
    [super viewDidLoad];
    
    self.title = @"按月统计";
    
    [self initAAChartView];
    [self initData];
    
    self.tipLab = [[UILabel alloc] initWithFrame:CGRectMake(0, 130, 100, 50)];
    self.tipLab.backgroundColor = [UIColor blueColor];
    self.tipLab.textColor = [UIColor whiteColor];
    self.tipLab.font = [UIFont systemFontOfSize:13];
    self.tipLab.textAlignment = NSTextAlignmentCenter;
    self.tipLab.hidden = YES;
    [self.view addSubview:self.tipLab];



- (void)initAAChartView 
    _aaChartView = [[AAChartView alloc] initWithFrame:CGRectMake(20, 120, SCREEN_WIDTH-40, 250)];
    _aaChartView.delegate = self;
    _aaChartView.scrollEnabled = NO;//禁用 AAChartView 滚动效果
    [self.view addSubview:_aaChartView];
    //设置 AAChartView 的背景色是否为透明
    _aaChartView.isClearBackgroundColor = YES;


- (void)initData

    NSArray *timeData = @[@"1月",@"2月",@"3月",@"4月",@"5月",@"6月",@"7月",@"8月",@"9月",@"10月",@"11月",@"12月"];
    NSArray *listData = @[@34.29,@7.29,@6.54,@9.56,@1.82,@0.57,@0.68,@6.29,@0.2,@14,@0.59,@0]; //此数组里面只能存放NSNumber类型,不能放字符串,否则不会显示内容
    
    _aaChartModel = AAChartModel.new
        .chartTypeSet(AAChartTypeArea)//图表类型
        .titleSet(@"")//图表主标题
        .subtitleSet(@"")//图表副标题
        .colorsThemeSet(@[@"#333df0"])//设置主题颜色数组
        .markerSymbolStyleSet(AAChartSymbolStyleTypeInnerBlank)//折线连接点样式为内部白色
        .yAxisLineWidthSet(@0)//Y轴轴线线宽为0即是隐藏Y轴轴线
        .yAxisLabelsEnabledSet(true) //Y 轴是否显示文字
        .yAxisMaxSet(@50)//设置Y轴最大值
        .yAxisTitleSet(@"") //Y 轴标题
        .xAxisTickIntervalSet(@2) //X 轴刻度点间隔数(设置每隔几个点显示一个 X轴的内容)
        .xAxisCrosshairSet([AACrosshair crosshairWithColor:@"#333df0" dashStyle:AAChartLineDashStyleTypeShortDash width:@0.5])
        .legendEnabledSet(false)
        .categoriesSet(timeData)
        .tooltipEnabledSet(false)
        .markerRadiusSet(@2)
        .seriesSet(@[
            AASeriesElement.new
                .nameSet(@"")
                .lineWidthSet(@1)
                .dataSet(listData)
        ]);
    
    NSMutableArray *arr = [NSMutableArray array];
    for (NSInteger i = 1; i <= 5; i ++) 
       
        AAPlotLinesElement *element = [AAPlotLinesElement new];
        element.dashStyleSet(AAChartLineDashStyleTypeShortDash)//样式:Dash,Dot,Solid等,默认Solid
            .widthSet(@(0.5)) //标示线粗细
            .valueSet(@(i*10)) //所在位置
            .zIndexSet(@(1))//层叠,标示线在图表中显示的层叠级别,值越大,显示越向前
            .colorSet(@"#DCDCDC")
            .labelSet(AALabel.new);
        [arr addObject:element];
    
    
    _aaChartModel
        .yAxisMinSet(@(0))//Y轴最小值
        .yAxisAllowDecimalsSet(NO)//是否允许Y轴坐标值小数
        .yAxisPlotLinesSet(arr.copy);

    [_aaChartView aa_drawChartWithChartModel:_aaChartModel];


//实现对 AAChartView 事件代理的监听
 #pragma mark -- AAChartView delegate
 - (void)aaChartView:(AAChartView *)aaChartView moveOverEventWithMessage:(AAMoveOverEventMessageModel *)message 
     
     NSDictionary *messageDic = @
         @"category":message.category,
         @"index":@(message.index),
         @"name":message.name,
         @"offset":message.offset,
         @"x":message.x,
         @"y":message.y
     ;
     
     NSNumber *plotX = message.offset[@"plotX"];
     
     self.tipLab.hidden = NO;
     self.tipLab.text = [NSString stringWithFormat:@"%f",[message.y floatValue]];
     self.tipLab.centerX = [plotX floatValue]+6+50;
     
     NSLog(@"mes:%@", messageDic);
 

@end

效果图:


以上是关于iOS AAChartKit 图表库的使用的主要内容,如果未能解决你的问题,请参考以下文章

📈📈📈📈📈iOS 图表框架 AAChartKit ---强大的高颜值数据可视化图表框架,支持柱状图条形图折线图曲线(代码

Excel2010图表怎样删除坐标轴线但保留坐标数字

更改使用 chart.js 创建的图表中的轴线颜色

Excel2010图表怎样删除坐标轴线但保留坐标数字

Python交互图表可视化Bokeh:6. 轴线| 浮动| 多图表

excel里图表的纵坐标轴线怎么调出来