主要利用echarts的SDK实现折线图,echarts利用宏定义+runtime实现了链式编程。熟悉echarts的小伙伴儿都知道那种骚气的写法。话不多讲,上代码。

//折线图
-(void)showLineCharts {
PYOption *option = [PYOption initPYOptionWithBlock:^(PYOption *option) {
option.calculableEqual(false)//是否启用拖拽重计算特性,默认关闭
.colorEqual(@[@"#3079F5", @"#16AE9D"])//数值系列的颜色列表(折线颜色)
/** 提示框 */
.tooltipEqual([PYTooltip initPYTooltipWithBlock:^(PYTooltip *tooltip) {
tooltip.triggerEqual(@"axis")
.textStyleEqual([PYTextStyle initPYTextStyleWithBlock:^(PYTextStyle *textStyle) {//设置文字大小
textStyle.fontSizeEqual([NSNumber numberWithInt:12]);//文字size
}])
.axisPointerEqual([PYAxisPointer initPYAxisPointerWithBlock:^(PYAxisPointer *axisPoint) {//设置线宽度
axisPoint.lineStyleEqual([PYLineStyle initPYLineStyleWithBlock:^(PYLineStyle *lineStyle) {
lineStyle.widthEqual(@1);
}]);
}]);
}])
/** 图例 */
.legendEqual([PYLegend initPYLegendWithBlock:^(PYLegend *legend) {//设置图例
legend.dataEqual(@[@"企业库",@"项目库"]);
}])
/** 直角坐标系内绘图网格, 说明见下图 */
.gridEqual([PYGrid initPYGridWithBlock:^(PYGrid *grid) {
//左上角位置
grid.xEqual(@45)
.yEqual(@20)
// 右下角位置
.x2Equal(@20)
.y2Equal(@30)
.borderWidthEqual(@0);
}])
/** X轴设置 */
.addXAxis([PYAxis initPYAxisWithBlock:^(PYAxis *axis) {
axis.typeEqual(@"category")//横轴默认为类目型(就是坐标自己设置)
.boundaryGapEqual(@(YES))
.dataEqual([[NSMutableArray alloc]initWithObjects:@"30", @"31", @"1", @"2", @"3", @"4", @"5", nil])
.splitLineEqual([PYAxisSplitLine initPYAxisSplitLineWithBlock:^(PYAxisSplitLine *splitLine) {
splitLine.showEqual(NO);//分隔线
}])
.axisLineEqual([PYAxisLine initPYAxisLineWithBlock:^(PYAxisLine *axisLine) {
axisLine.showEqual(NO);//坐标轴线
}])
.axisTickEqual([PYAxisTick initPYAxisTickWithBlock:^(PYAxisTick *axisTick) {
axisTick.showEqual(YES);// 坐标轴小标记
}]);
}])
/** Y轴设置 */
.addYAxis([PYAxis initPYAxisWithBlock:^(PYAxis *axis) {
axis.splitNumberEqual(@7)// 分割段数,默认为5
.typeEqual(@"value")// 纵轴默认为数值型(就是坐标系统生成), 改为 @"category" 会有问题, 读者可以自行尝试
.axisLineEqual([PYAxisLine initPYAxisLineWithBlock:^(PYAxisLine *axisLine) {
axisLine.showEqual(NO);
}])
.splitLineEqual([PYAxisSplitLine initPYAxisSplitLineWithBlock:^(PYAxisSplitLine *splitLine) {
splitLine.lineStyleEqual([PYLineStyle initPYLineStyleWithBlock:^(PYLineStyle *lineStyle) {
lineStyle.typeEqual(@"dashed");// 分割线类型 'solid' | 'dotted' | 'dashed' 虚线类型
}]);
}]);
}])
/** 第一条折线设置 */
.addSeries([PYSeries initPYSeriesWithBlock:^(PYSeries *series) {
series.nameEqual(@"企业库")
.typeEqual(PYSeriesTypeLine)// 类型为折线
/*PS PYCartesianSeries为PYSeries的子类,symbolSize是PYCartesianSeries的属性.未找到调用方式*/
//.markPointEqual([PYMarkPoint initPYMarkPointWithBlock:^(PYMarkPoint *markPoint) {
// markPoint.symbolSizeEqual(@1.5);// 坐标点大小
//}])
.itemStyleEqual([PYItemStyle initPYItemStyleWithBlock:^(PYItemStyle *itemStyle) {// 坐标点样式, 设置连线的宽度
itemStyle.normalEqual([PYItemStyleProp initPYItemStylePropWithBlock:^(PYItemStyleProp *itemStyleProp) {
itemStyleProp.lineStyleEqual([PYLineStyle initPYLineStyleWithBlock:^(PYLineStyle *lineStyle) {
lineStyle.widthEqual(@1.5);
}]);
}]);
}])
// 添加坐标点 y 轴数据 ( 如果某一点 无数据, 可以传 @"-" 断开连线 如 : @[@"7566", @"-", @"7571"] )
.dataEqual(@[@"620", @"890", @"630", @"1050", @"1000", @"850", @"1200"]);
}])
/** 第二条折线设置 */
.addSeries([PYSeries initPYSeriesWithBlock:^(PYSeries *series) {
series.nameEqual(@"项目库")
.typeEqual(PYSeriesTypeLine)// 类型为折线
/*PS PYCartesianSeries为PYSeries的子类,symbolSize是PYCartesianSeries的属性.未找到调用方式*/
//.markPointEqual([PYMarkPoint initPYMarkPointWithBlock:^(PYMarkPoint *markPoint) {
// markPoint.symbolSizeEqual(@1.5);// 坐标点大小
//}])
.itemStyleEqual([PYItemStyle initPYItemStyleWithBlock:^(PYItemStyle *itemStyle) {// 坐标点样式, 设置连线的宽度
itemStyle.normalEqual([PYItemStyleProp initPYItemStylePropWithBlock:^(PYItemStyleProp *itemStyleProp) {
itemStyleProp.lineStyleEqual([PYLineStyle initPYLineStyleWithBlock:^(PYLineStyle *lineStyle) {
lineStyle.widthEqual(@1.5);
}]);
}]);
}])
// 添加坐标点 y 轴数据 ( 如果某一点 无数据, 可以传 @"-" 断开连线 如 : @[@"7566", @"-", @"7571"] )
.dataEqual(@[@"1200", @"500", @"320", @"850", @"1070", @"900", @"850"]);
}]);
}];
//self.chartView.userInteractionEnabled = NO;
[self.chartView setOption:option];
[self.chartView loadEcharts];
}
PS:只是转译了一下别人的代码。最上面有链接。
网友评论