You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:25:06