Charts图表库升级语法变更笔记

目标:

将项目中的Charts库从2.2.3更新至最新的3.1.1。

环境:

旧环境:XCode7.3、swift2;
新环境:XCode9.4、swift4.1。

语法变更:

1.descriptionText属性

该属性是用来设置图表名称的。 现在变成了一个chartDescription的对象属性,通过该属性还可以设置颜色和字号等属性。

_chartView.descriptionText = @"柱状图";
 _chartView.chartDescription.text =@"柱状图"; 
2.noDataTextDescription属性

该属性是用来设置没有数据时图表的占位文字。 现在该属性变成了noDataText。

_chartView.noDataTextDescription = @"You need to provide data for the chart.";
_chartView.noDataText = @"You need to provide data for the chart.";
3. drawSliceTextEnabled属性

该属性是用来设置饼状图每个部分的文字描述是否显示。 现在该属性变成drawEntryLabelsEnabled。

_chartView. drawSliceTextEnabled =YES;
_chartView.drawEntryLabelsEnabled =YES;
4.spaceBetweenLabels属性

该属性是用来设置两个label之间的间隔的。若设置为1,则如果能全部显示,则每个柱形下面都会显示label。 现在该属性变为granularity。

ChartXAxis *xAxis1 = _chartView.xAxis;
xAxis1.spaceBetweenLabels = 1.0;
xAxis1.granularity =1.0;
5. position属性(上面部分的代码是旧环境代码)

该属性是用来设置图例的位置的。 现在该属性由一个枚举属性变成了几个属性的组合。

ChartLegend *l =_ chartView.legend;
l.position = ChartLegendPositionBelowChartLeft;//图例位于图表的左下方且在图表外部
ChartLegend *l =_ chartView.legend;
l.horizontalAlignment = ChartLegendHorizontalAlignmentLeft;//水平方向的左侧
l.verticalAlignment = ChartLegendVerticalAlignmentBottom;//竖直方向的底部
l.orientation = ChartLegendOrientationHorizontal;//图例水平排列
l.drawInside =NO;//图例不可以显示在图表内
6.ChartYAxis的valueFormatter属性

该属性是用来设置Y轴上显示数据和格式的。 现在该属性的所属类由NSNumberFormatter变为3.0版本新增类ChartAxisValueFormatter。

ChartYAxis *leftAxis = _chartView.leftAxis;
leftAxis.valueFormatter = [[NSNumberFormatter alloc] init];
leftAxis.valueFormatter.maximumFractionDigits = 0;
leftAxis.valueFormatter.negativeSuffix = @"";
leftAxis.valueFormatter.positiveSuffix = @"";
ChartYAxis *leftAxis = _chartView.leftAxis;
NSNumberFormatter *leftAxisFormatter = [[NSNumberFormatter alloc] init];
leftAxisFormatter.maximumFractionDigits = 0;//设置小数点位数
leftAxisFormatter.negativeSuffix =@"";//设置Y轴正向的数据后缀
leftAxisFormatter.positiveSuffix =@"";//设置Y轴负向的数据后缀
leftAxis.valueFormatter =[[ChartDefaultAxisValueFormatter alloc] initWithFormatter:leftAxisFormatter];//设置Y轴的显示数据

注:ChartDataSet、ChartData的valueFormatter属性同上也需要包装一层。
7.ChartXAxis的valueFormatter属性

该属性是用来设置X轴上显示数据和格式的。 Chart3.0新增属性,为了统一坐标轴的属性和设置。

NSMutableArray *xVals = [[NSMutableArray alloc] init];
for (int i = 0; i < count; i++)
 {
      [xVals addObject:self.arrayName[i % self.arrayName.count]];
  }
 xAxis1.valueFormatter =[[ChartIndexAxisValueFormatter alloc] initWithValues:xVals];
8.饼状图的数据设置
   NSArray * parties =@[@"Party A",@"Party B",@"Party C",@"Party D",@"Party E"];
   NSArray * values =@[@"10",@"20",@"30",@"25",@"15"];

   NSMutableArray *yVals = [[NSMutableArray alloc] init];
   NSMutableArray *xVals = [[NSMutableArray alloc] init];
 
    NSUInteger count = parties.count;
    if (count >=10) {
        count = 10;//限制个数
    }
    for (int i = 0; i < count; i++)
    {
        NSString * numString = values[i];
        double dd = [numString doubleValue];
        [yVals addObject:[[BarChartDataEntry alloc] initWithValue:dd xIndex:i]];
    }
    for (int i = 0; i < count; i++)
    {
        [xVals addObject:parties[i % parties.count]];
    }
    PieChartDataSet *dataSet = [[PieChartDataSet alloc] initWithYVals:yVals label:@""];
    PieChartData *data = [[PieChartData alloc] initWithXVals:xVals dataSet:dataSet];
    _chartView.data = data;
}

   NSUInteger count = parties.count;
    if (count >=10) {
        count = 10;
    }

    for (int i = 0; i < count; i++)
    {
         NSString * numString = values[i];
        double dd = [numString doubleValue];
        [yVals1 addObject:[[PieChartDataEntry alloc] initWithValue:dd label:parties[i % parties.count]]];
    }

    PieChartDataSet *dataSet = [[PieChartDataSet alloc] initWithValues:yVals1 label:@""];
    PieChartData *data = [[PieChartData alloc] initWithDataSet:dataSet];
    _chartView.data = data;
   NSArray * parties =@[@"Party A",@"Party B",@"Party C",@"Party D",@"Party E"];
   NSArray * values =@[@"10",@"20",@"30",@"25",@"15"];

   NSMutableArray *yVals = [[NSMutableArray alloc] init];
   NSMutableArray *xVals = [[NSMutableArray alloc] init];
 
    NSUInteger count = parties.count;
    if (count >=10) {
        count = 10;//限制个数
    }

    for (int i = 0; i < count; i++)
    {
        NSString * numString = values[i];
        double dd = [numString doubleValue];
        [yVals  addObject:[[PieChartDataEntry alloc] initWithValue:dd label:parties[i % parties.count]]];
    }

    PieChartDataSet *dataSet = [[PieChartDataSet alloc] initWithValues:yVals  label:@""];
    PieChartData *data = [[PieChartData alloc] initWithDataSet:dataSet];
    _chartView.data = data;
9.单一柱状图的数据设置
   NSArray * parties =@[@"Party A",@"Party B",@"Party C",@"Party D",@"Party E"];
   NSArray * values =@[@"10",@"20",@"30",@"25",@"15"];

   NSMutableArray *yVals = [[NSMutableArray alloc] init];
   NSMutableArray *xVals = [[NSMutableArray alloc] init];

   NSUInteger count = parties.count;
    if (count >=10) {
        count = 10;
    }

    for (int i = 0; i < count; i++)
    {
        double dd = [values[i] doubleValue];
        [yVals addObject:[[BarChartDataEntry alloc] initWithValue:dd xIndex:i]];
    }

    for (int i = 0; i < count; i++)
    {
        [xVals addObject: parties[i % parties.count]];
    }

    BarChartDataSet *set1 = [[BarChartDataSet alloc] initWithYVals:yVals label:@""];

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.negativeSuffix = @"k";
    formatter.positiveSuffix = @"k";
    formatter.numberStyle = NSNumberFormatterNoStyle;
    formatter.maximumFractionDigits = 3;//小数位数
    formatter.multiplier = @1.f;
    [set1 setValueFormatter:formatter];//设置显示数据格式

    BarChartData *data = [[BarChartData alloc] initWithXVals:xVals dataSet:set1];
    data.groupSpace = 0.8;
    _chartView.data = data;
   NSArray * parties =@[@"Party A",@"Party B",@"Party C",@"Party D",@"Party E"];
   NSArray * values =@[@"10",@"20",@"30",@"25",@"15"];

   NSMutableArray *yVals = [[NSMutableArray alloc] init];
   NSMutableArray *xVals = [[NSMutableArray alloc] init];

   NSUInteger count = parties.count;
    if (count >=10) {
        count = 10;
    }

    for (int i = 0; i < count; i++)
    {
        double dd = [values[i] doubleValue];
        [yVals addObject:[[BarChartDataEntry alloc] initWithX:i  y:dd]];
    }

    for (int i = 0; i < count; i++)
    {
        [xVals addObject:parties[i %parties.count]];
    }
    xAxis1.valueFormatter =[[ChartIndexAxisValueFormatter alloc] initWithValues:xVals];

    BarChartDataSet *set1 = [[BarChartDataSet alloc] initWithValues:yVals label:@""];

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.negativeSuffix = @"k";
    formatter.positiveSuffix = @"k";
    formatter.numberStyle = NSNumberFormatterNoStyle;
    formatter.maximumFractionDigits = 3;//小数位数
    formatter.multiplier = @1.f;
    [set1 setValueFormatter:[[ChartDefaultValueFormatter alloc] initWithFormatter:formatter]];//设置显示数据格式
   
    BarChartData *data = [[BarChartData alloc] initWithDataSet:set1];
    chartView2.data = data;
10.多柱状图(簇状图)的数据设置
// (0.35 + 0.1) * 2 + 0.1 = 1.00 -> interval per "group"
    float groupSpace = 0.1f;
    float barSpace = 0.1f;
    float barWidth = 0.35f;
  
   BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets];
    data.barWidth =barWidth;

    _chartView.xAxis.axisMinimum =0;
    _chartView.xAxis.axisMaximum =[data groupWidthWithGroupSpace:groupSpace barSpace: barSpace] * count;
    
    [data groupBarsFromX: 0.0 groupSpace: groupSpace barSpace: barSpace];
    _chartView.data = data;

可以通过设置X轴的label数量,调整X轴竖线间隔

xAxis1.labelCount =count;//每个组都会有描述,每个组之间都会有竖线隔开

通过设置centerAxisLabelsEnabled属性使每组的描述文字居中

xAxis1.centerAxisLabelsEnabled =YES;

通过设置最大、最小值来设置X轴的起始和最终位置

xAxis.axisMinimum = -1.0;//避免柱状图从X轴上开始显示
xAxis.axisMaximum =count;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容