CorePlot 2.3修改Y轴起始值:iOS11.3散点图Y轴从3.0开始
调整CorePlot 2.3散点图Y轴范围至3.0-10.0的实现方案
我来帮你搞定这个Y轴范围调整的问题,在iOS 11.3上用CorePlot 2.3实现起来很清晰,主要分几步:设置Y轴的可视范围,再根据需求处理小于3.0的数据点。
1. 设置Y轴的可视范围
你已经创建了newGraph并应用了主题,接下来只需要获取图表的plotSpace,直接指定Y轴的范围为3.0到10.0即可:
CPTXYGraph *newGraph = [[CPTXYGraph alloc] initWithFrame:CGRectZero]; CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme]; [newGraph applyTheme:theme]; // 获取XY plot space并设置Y轴范围 CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)newGraph.defaultPlotSpace; // location是起始值3.0,length是范围长度(10.0-3.0=7.0) plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(3.0) length:CPTDecimalFromDouble(7.0)];
这样设置后,Y轴的可视区域就固定在3.0到10.0之间,小于3.0的点会默认被隐藏在图表可视区域之外。
2. 处理小于3.0的数据点
根据你的需求,有两种处理方式可选:
方式一:直接过滤掉小于3.0的数据
如果这些0.0的点不需要显示,在给散点图提供数据前先过滤:// 假设你的原始数据是包含X/Y值的数组,比如NSArray<YourDataModel *> *originalData NSMutableArray *filteredData = [NSMutableArray array]; for (YourDataModel *dataPoint in originalData) { if (dataPoint.yValue >= 3.0) { [filteredData addObject:dataPoint]; } } // 后续用filteredData作为散点图的数据源方式二:将小于3.0的点截断在Y轴底部(3.0位置)
如果希望这些点显示在图表的最底部而不是隐藏,可以在数据源方法里修改Y值:- (NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index { YourDataModel *dataPoint = self.filteredData[index]; if (fieldEnum == CPTScatterPlotFieldY) { double yValue = dataPoint.yValue; // 把小于3.0的值替换为3.0,实现截断效果 return @(MAX(yValue, 3.0)); } else { return @(dataPoint.xValue); } }
3. 优化Y轴刻度显示(可选)
为了让Y轴的刻度更贴合新范围,你可以调整轴的刻度设置,避免出现0.0的刻度标签:
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)newGraph.axisSet; CPTXYAxis *yAxis = axisSet.yAxis; // 设置Y轴主刻度间隔为1.0 yAxis.majorIntervalLength = CPTDecimalFromDouble(1.0); // 隐藏次要刻度 yAxis.minorTicksPerInterval = 0; // 让轴的范围和plotSpace保持一致,确保刻度只在3.0-10.0之间 yAxis.axisRange = plotSpace.yRange; // 排除0.0到3.0的刻度显示 yAxis.labelExclusionRanges = @[[CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0) length:CPTDecimalFromDouble(3.0)]];
这样整个图表的Y轴就完全符合你的需求啦。
内容的提问来源于stack exchange,提问作者tansvaal
相关产品推荐
相关产品推荐

