Charts 入门

作者: __block | 来源:发表于2016-11-23 20:39 被阅读511次

最近工程用到了 Charts, 网上苦苦找寻, 只发现了 Android 的详细使用说明, 于是决定翻译一下, 方便大家以后使用, Android 原文: 庄宏基的博客 - 博客频道 - CSDN.NET

Charts 地址 


• Chart 支持折线图、柱状图、散点图、烛状图、气泡图、饼状图和蜘蛛网状图, 除此之外还支持多种图表混合使用

• Chart 支持缩放、拖拽、选择、动画

• Chart 使用 Swift, 如果工程为 OC, 则需要混编

<1> cocoapods 导入(或 Github 下载以后, 找到 Charts 下 Classes 文件夹手动导入即可)

<2> Build Settings-Build Options-Embedded Content Contains Swift Code-YES, 

<3> #import <工程名-Swift.h>


用法及其基本属性

拿 CombinedChartView(复合图表) 举例

CombinedChartView *chartView = [[CombinedChartView alloc] initWithFrame:frame];

// 可以添加CombinedChartDrawOrderBar, CombinedChartDrawOrderBubble, CombinedChartDrawOrderCandle, CombinedChartDrawOrderLine, CombinedChartDrawOrderScatter

chartView.drawOrder = @[CombinedChartDrawOrderLine];

chartView.delegate = self;

[self.view addSubview:chartView];

// 设置 chartView 的数据源

CombinedChartData *data = [[CombinedChartData alloc] initWithXVals:@[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]];

LineChartData *d = [[LineChartData alloc] init];

NSMutableArray *entries = @[].mutableCopy;

for (int index = 0; index < ITEM_COUNT; index++) {

[entries addObject:[[ChartDataEntry alloc] initWithValue:(arc4random_uniform(15) + 10) xIndex:index]];

}

LineChartDataSet *set = [[LineChartDataSet alloc] initWithYVals:entries label:@"Line DataSet"];

[d addDataSet:set];

data.lineData = d;

chartView.data = data;

ChartViewDelegate

// 选中 chartView 上的某个点

- (void)chartValueSelected:(ChartViewBase * _Nonnull)chartView entry:(ChartDataEntry * _Nonnull)entry dataSetIndex:(NSInteger)dataSetIndex highlight:(ChartHighlight * _Nonnull)highlight {

//entry 里有xIndex(下标)和 value(下标对应的值)

//dataSetIndex 为选中数据集合的 index

}

// 没有选中时

- (void)chartValueNothingSelected:(ChartViewBase * _Nonnull)chartView {

}

// chartView 缩放时

- (void)chartScaled:(ChartViewBase * _Nonnull)chartView scaleX:(CGFloat)scaleX scaleY:(CGFloat)scaleY {

}

// chartView 拖拽时

- (void)chartTranslated:(ChartViewBase * _Nonnull)chartView dX:(CGFloat)dX dY:(CGFloat)dY {

}



属性:

分为对 ChartView, 对ChartXAxis, 对ChartYAxis,  对ChartDataSet 的设置

• ChartView

chartView.descriptionText = @"这是个图表";// 右下角描述

chartView.noDataTextDescription = "No Data";// 没有数据时描述

chartView.drawGridBackgroundEnabled = YES;// 网格背景

chartView.gridBackgroundColor = [UIColor redColor];//  背景颜色

chartView.drawBarShadowEnabled = NO;// 阴影

chartView.drawBordersEnabled = YES;// 边框

chartView.pinchZoomEnabled = YES// XY 轴同时缩放

chartView.scaleEnabled = YES;// 缩放

chartView.highlightPerDragEnabled = YES;// 能否拖拽高亮线(数据点与坐标的提示线)

chartView.autoScaleMinMaxEnabled = YES;// 缩放时自动调整最大最小值

chartView.legend.enabled = NO;// 图例是否显示

chartView.drawBordersEnabled = YES;// 表格边框是否显示

chartView.scaleYEnabled = NO;//  缩放 Y 轴

chartView.scaleXEnabled = YES;// 缩放 X 轴

chartView.doubleTapToZoomEnabled = YES;//  双击缩放

chartView.borderColor = [UIColor BlueColor];// 边框颜色

chartView.dragDecelerationEnabled = YES;// 结束拖拽减速

chartView.maxVisibleValueCount = 30;// 可见标签数量最大值(setDrawValues才生效)

[chartView setExtraOffsetsWithLeft:10 top:0 right:10 bottom:0];// 偏移

• ChartXAxis

ChartXAxis *xAxis = chartView.xAxis;

[xAxis setLabelsToSkip:4];// 跳过显示的标签数

xAxis.labelPosition = XAxisLabelPositionBottom;// X轴的位置

xAxis.labelTextColor = [UIColor whiteColor];//  颜色

xAxis.spaceBetweenLabels = 16.0;// 标签之间的间距

xAxis.avoidFirstLastClippingEnabled = YES;// 两侧超出图表

xAxis.gridColor = [UIColor whiteColor];// X 轴网格线颜色

xAxis.drawAxisLineEnabled = NO;// X 轴边线

xAxis.drawGridLinesEnabled = NO;// X 轴网格线

• ChartYAxis

ChartYAxis *rightAxis = chartView.rightAxis;

rightAxis.drawGridLinesEnabled = NO;// Y 轴网格线

rightAxis.labelCount = 7;//  标签个数

rightAxis.drawAxisLineEnabled = NO;// Y 轴边线

rightAxis.startAtZeroEnabled = NO;//  从零显示

rightAxis.granularityEnabled = YES;// 轴密度自适应

rightAxis.labelPosition = YAxisLabelPositionInsideChart;// Y  轴位置

rightAxis.spaceTop = 10;// 最高值的顶部间距占最高值的值的百分比

rightAxis.showOnlyMinMaxEnabled = YES;// 只显示最大最小

• ChartDataSet

LineChartDataSet *set = [[LineChartDataSet alloc] initWithYVals:NSArray<ChartDataEntry *>];

set.drawCubicEnabled = NO;// 曲线为圆滑曲线

set.cubicIntensity = 0.2;// 曲线弧度

set.drawCirclesEnabled = NO;// 每个点是否显示

set.lineWidth = 0.8f;// 线宽

set.circleRadius = 4.0;// 每个点的切角

[set setCircleColor:UIColor.whiteColor];// 每个点的颜色

set.highlightColor = [UIColor redColor];// 点击某个点时,横竖两条线的颜色

set.fillColor = [UIColor whiteColor];// 填充颜色

set.drawHorizontalHighlightIndicatorEnabled = NO;// 点击某个点时,水平线是否显示

set.drawValuesEnabled = YES;// 在点上绘制Value

// 渐变数组

NSArray *gradientColors = @[(id)COLOR_BLUE.CGColor,(id)COLOR_BLUE.CGColor];

CGGradientRef gradient = CGGradientCreateWithColors(nil, (CFArrayRef)gradientColors, nil);

// 渐变设置

set.fillAlpha = 0.13f;

set.fill = [ChartFill fillWithLinearGradient:gradient angle:90.f];

set.drawFilledEnabled = YES;

...还有很多, 就不一一列举了, 如果还有什么需要, 可以留言, 我会一一补充的, 后续还有实时数据, 动画, MakerView等其它

相关文章

网友评论

  • f367c38c26f7:你好请问一下,怎么设置marker只显示在最后一个值上切不可改变
    __block:@userID 早晨试了一下
    ChartDataSet *set = (ChartDataSet *)_chartView.data.dataSets[0];
    ChartDataEntry *entry = set.values[set.values.count - 1];
    ChartHighlight *highlight = [[ChartHighlight alloc] initWithX:entry.x y:entry.y dataSetIndex:0];
    [_chartView highlightValue:highlight];
    _chartView.userInteractionEnabled = NO;
    这样就可以
    f367c38c26f7:@__block 思路我也是这样想的,但是具体怎么写呢,代码上怎么实现
    __block:@userID 选中最后一个点并且关闭拖拽交互
  • a45a16140b32:问题已经解决
    __block:@哎呀小wang呀 好的好的,厉害了word哥
    a45a16140b32:@__block :smile: 这有什么sorry的 问题解决啦
    __block:@哎呀小wang呀 额.. sorry, 我才看到, 我写的时候用的是 Charts 2.x, 过几天我看看3.0有什么变化, 在具体写一下
  • a45a16140b32:您好 CombinedChartData initWithXVals: 实现中没有,请问您是怎么做到的????
    a45a16140b32:我使用的版本是charts 3.0
  • 儒此优雅:6666,写得不错!
  • 9fb683d289d9:6666,大牛啊

本文标题:Charts 入门

本文链接:https://www.haomeiwen.com/subject/ggcvpttx.html