ZFChart
A simple chart library for iOS , contains barChart, lineChart, pieChart, waveChart, radarChart, cirqueChart. Thanks for your star if you like. 一款简单好用的图表库,目前有柱状,线状,饼图,波浪,雷达,圆环等类型,喜欢的欢迎star一个...
Install / Use
/learn @Zirkfied/ZFChartREADME
ZFChart
A simple chart library for iOS , contains barChart, lineChart, pieChart, waveChart, radarChart, cirqueChart. Thanks for your star if you like.
模仿PNChart,Charts写的一个图表库,用法简单,暂时有柱状图,线状图,饼图,波浪图,雷达图,圆环图等类型,带动画效果,后续可能会更新新的类型,喜欢的欢迎star一个,有任何建议或问题可以加QQ群交流:451169423
用法:
第一步(step 1)
将项目里ZFChart整个文件夹拖进新项目
第二步(step 2)
#import "ZFChart.h"
第三步(step 3)
ZFGenericChartDataSource数据源方法
@required 必须实现的方法
//返回value数据
//当只有1组数据时,NSArray存储 @[@"1", @"2", @"3", @"4"]
当有多组数据时,NSArray存储 @[@[@"123", @"300", @"490", @"380", @"167", @"235"], @[@"256", @"283", @"236", @"240", @"183", @"200"], @[@"256", @"256", @"256", @"256", @"256", @"256"]]
//barChart: 代表有6组,每组有3个item
//lineChart: 代表有6组,每组有3个item(另一种理解就是有3条线,每条线上有6个点)
- (NSArray *)valueArrayInGenericChart:(ZFGenericChart *)chart;
@optional 可选实现的方法
//返回名称数组(NSArray必须存储NSString类型)
- (NSArray *)nameArrayInGenericChart:(ZFGenericChart *)chart{
return @[@"一年级", @"二年级", @"三年级", @"四年级", @"五年级", @"六年级"];
}
//返回颜色数组(NSArray必须存储UIColor类型, 若不设置,默认随机)
//barChart: 若每组有3个item,则返回3个颜色
//lineChart:若有3条线,则返回3个颜色
- (NSArray *)colorArrayInGenericChart:(ZFGenericChart *)chart{
return @[ZFSkyBlue, ZFOrange, ZFMagenta];
}
//y轴(普通图表) 或 x轴(横向图表) 数值显示的最大值(若不设置,默认返回数据源最大值)
- (CGFloat)axisLineMaxValueInGenericChart:(ZFGenericChart *)chart;
//y轴(普通图表) 或 x轴(横向图表) 数值显示的最小值(若不设置,默认返回数据源最小值)
//(PS:当 isResetAxisLineMinValue 为NO时,此方法无效)(When isResetAxisLineMinValue is NO, the method is invalid)
- (CGFloat)axisLineMinValueInGenericChart:(ZFGenericChart *)chart;
//y轴(普通图表) 或 x轴(横向图表) 数值显示的段数(若不设置,默认5段)
- (NSInteger)axisLineSectionCountInGenericChart:(ZFGenericChart *)chart;
BarChart(柱状图)
须遵循ZFGenericChartDataSource数据源协议
ZFBarChart * barChart = [[ZFBarChart alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - NAVIGATIONBAR_HEIGHT)];
barChart.dataSource = self;
barChart.delegate = self;
barChart.topicLabel.text = @"xx小学各年级人数";
barChart.unit = @"人";
[self.view addSubview:barChart];
[barChart strokePath];
ZFBarChartDelegate协议方法
@optional 可选实现的方法
//x轴value文本颜色数组(若不设置,则全部返回黑色)
//返回UIColor或者NSArray(NSArray里必须存储UIColor类型)
- (id)valueTextColorArrayInChart:(ZFGenericChart *)chart;
//bar宽度(若不设置,默认为25.f)
- (CGFloat)barWidthInBarChart:(ZFBarChart *)barChart;
//组与组之间的间距(若不设置,默认为20.f)
- (CGFloat)paddingForGroupsInBarChart:(ZFBarChart *)barChart;
//每组里面,bar与bar之间的间距(若不设置,默认为5.f)(当只有一组数据时,此方法无效)
- (CGFloat)paddingForBarInBarChart:(ZFBarChart *)barChart;
效果展示

- (NSArray *)valueArrayInGenericChart:(ZFGenericChart *)chart{
return @[@"123", @"256", @"300", @"283", @"490", @"236"];
}

- (NSArray *)valueArrayInGenericChart:(ZFGenericChart *)chart{
NSArray * array1 = @[@"123", @"300", @"490", @"380", @"167", @"235"];
NSArray * array2 = @[@"256", @"283", @"236", @"240", @"183", @"200"];
NSArray * array3 = @[@"256", @"256", @"256", @"256", @"256", @"256"];
return @[array1, array2, array3];
}

//当只有一组数据时,必须返回UIColor
- (id)valueTextColorArrayInChart:(ZFGenericChart *)chart{
return ZFBlue;
}

//当有多组数据时,若返回UIColor,则所有value颜色一致
- (id)valueTextColorArrayInChart:(ZFGenericChart *)chart{
return ZFBlue;
}

//当有多组数据时,若返回NSarray,效果如上
- (id)valueTextColorArrayInChart:(ZFGenericChart *)chart{
return @[ZFColor(71, 204, 255, 1), ZFColor(253, 203, 76, 1), ZFColor(16, 140, 39, 1)];
}
LineChart(线状图)
须遵循ZFGenericChartDataSource数据源协议
ZFLineChart * lineChart = [[ZFLineChart alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - NAVIGATIONBAR_HEIGHT)];
lineChart.dataSource = self;
lineChart.delegate = self;
lineChart.topicLabel.text = @"xx小学各年级男女人数";
lineChart.unit = @"人";
[self.view addSubview:lineChart];
[lineChart strokePath];
ZFLineChartDelegate协议方法
@optional 可选实现的方法
//组宽(若不设置,默认为25.f)
- (CGFloat)groupWidthInLineChart:(ZFLineChart *)lineChart;
//组与组之间的间距(若不设置,默认为20.f)
- (CGFloat)paddingForGroupsInLineChart:(ZFLineChart *)lineChart
//圆的半径(若不设置,默认为5.f)
- (CGFloat)circleRadiusInLineChart:(ZFLineChart *)lineChart;
线宽(若不设置,默认为2.f)
- (CGFloat)lineWidthInLineChart:(ZFLineChart *)lineChart;
效果展示

- (NSArray *)valueArrayInGenericChart:(ZFGenericChart *)chart{
return @[@"123", @"256", @"300", @"283", @"490", @"236"];
}

- (NSArray *)valueArrayInGenericChart:(ZFGenericChart *)chart{
NSArray * array1 = @[@"123", @"300", @"490", @"380", @"167", @"451"];
NSArray * array2 = @[@"380", @"200", @"326", @"240", @"50", @"137"];
NSArray * array3 = @[@"256", @"300", @"89", @"430", @"256", @"256"];
return @[array1, array2, array3];
}
PieChart(饼图)
须遵循ZFPieChartDataSource,ZFPieChartDelegate协议
ZFPieChart * pieChart = [[ZFPieChart alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - NAVIGATIONBAR_HEIGHT)];
pieChart.dataSource = self;
pieChart.delegate = self;
[self.view addSubview:pieChart];
[pieChart strokePath];
ZFPieChartDataSource数据源方法
@required 必须实现的方法
//返回value数据(NSArray必须存储NSString类型)
- (NSArray *)valueArrayInPieChart:(ZFPieChart *)chart;
//返回颜色数组(NSArray必须存储UIColor类型)
- (NSArray *)colorArrayInPieChart:(ZFPieChart *)chart;
ZFPieChartDelegate代理方法
@required 必须实现的方法
//设置饼图的半径
- (CGFloat)radiusForPieChart:(ZFPieChart *)pieChart;
@optional 可选实现的方法
/**
* 当饼图类型为圆环类型时,可通过此方法把半径平均分成n段,圆环的线宽为n分之1,间接计算圆环线宽,简单理解就是调整圆环线宽的粗细
* (若不设置,默认平均分2段)
* (e.g. 当radius为150,把半径平均分成4段,则圆环的线宽为150 * (1 / 4), 即37.5),如下图所示
*
* (PS:此方法对 整圆(kPieChartPatternTypeForCircle)类型 无效)
*
* @return 设置半径平均段数(可以为小数, 返回的值必须大于1,当<=1时则自动返回默认值)
*/
- (CGFloat)radiusAverageNumberOfSegments:(ZFPieChart *)pieChart;

效果展示


饼图其余属性

//当piePatternType设置为kPieChartPatternTypeForCircle时,则饼图为整圆,如上图所示
pieChart.piePatternType = kPieChartPatternTypeForCircle;
WaveChart(波浪图)
须遵循ZFGenericChartDataSource数据源协议
ZFWaveChart * waveChart = [[ZFWaveChart alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - NAVIGATIONBAR_HEIGHT)];
waveChart.dataSource = self;
waveChart.delegate = self;
waveChart.topicLabel.text = @"xx小学各年级人数";
waveChart.unit = @"人";
[self.view addSubview:waveChart];
[waveChart strokePath];
ZFWaveChartDelegate协议方法
@optional 可选实现的方法
//组宽(若不设置,默认为25.f)
- (CGFloat)groupWidthInWaveChart:(ZFWaveChart *)waveChart;
//组与组之间的间距(若不设置,默认为20.f)
- (CGFloat)paddingForGroupsInWaveChart:(ZFWaveChart *)waveChart;
//path颜色(若不设置,默认为ZFSkyBlue)
- (UIColor *)pathColorInWaveChart:(ZFWaveChart *)waveChart;
效果展示

//波浪图只支持显示1组数据,NSArray里只能存NSString类型
- (NSArray *)valueArrayInGenericChart:(ZFGenericChart *)chart{
return @[@"123", @"256", @"300", @"283", @"490", @"236"];
}

//设置波浪样式,默认为(kWavePatternTypeForCurve)
waveChart.wavePatternType = kWavePatternTypeForSharp
HorizontalBarChart(横向柱状图)
须遵循ZFGenericChartDataSource数据源协议
delegate是ZFHorizontalBarChartDelegate
ZFHorizontalBarChart * barChart = [[ZFHorizontalBarChart alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - NAVIGATIONBAR_HEIGHT)];
barChart.dataSource = self;
barChart.delegate = self;
barChart.topicLabel.text = @"xx小学各年级人数";
barChart.unit = @"人";
[self.view addSubview:barChart];
[barChart strokePath];
效果展示

RadarChart(雷达图)
须遵循ZFRadarChartDataSourc
Related Skills
node-connect
349.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.7kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
