代码之家  ›  专栏  ›  技术社区  ›  Luc

核心情节:还不明白如何有自定义标签和记号

  •  6
  • Luc  · 技术社区  · 14 年前

    // Adjust graph using above data                
    CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;
    plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-10) length:CPDecimalFromFloat(xmax + 17)];
    plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-450) length:CPDecimalFromFloat(3750)];
    
    // Setup axis
    CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet;
    CPLineStyle *lineStyle = [CPLineStyle lineStyle];
    lineStyle.lineColor = [CPColor whiteColor];
    lineStyle.lineWidth = 1.0f;
    CPTextStyle *cyanStyle = [CPTextStyle textStyle];
    cyanStyle.color = [CPColor cyanColor];
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setMaximumFractionDigits:0];
    
    // x axis with custom labels
    axisSet.xAxis.labelingPolicy = CPAxisLabelingPolicyNone;
    axisSet.xAxis.majorTickLineStyle = lineStyle;
    axisSet.xAxis.axisLineStyle = lineStyle;
    axisSet.xAxis.majorTickLength = 3.0f;
    axisSet.xAxis.labelOffset = 3.0f;
    
    axisSet.xAxis.visibleRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromInteger(0) length:CPDecimalFromInteger(xmax)];
    axisSet.xAxis.labelExclusionRanges = [NSArray arrayWithObjects:
                                          [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-10) 
                                                                      length:CPDecimalFromFloat(10)], 
                                          nil];
    
    NSArray *customTickLocations = [NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:0],
                                    [NSDecimalNumber numberWithInt:6],
                                    [NSDecimalNumber numberWithInt:12],
                                    [NSDecimalNumber numberWithInt:18],
                                    [NSDecimalNumber numberWithInt:24],
                                    [NSDecimalNumber numberWithInt:30],
                                    [NSDecimalNumber numberWithInt:36],
                                    [NSDecimalNumber numberWithInt:41],                                             
                                    [NSDecimalNumber numberWithInt:47],                                             
                                    nil];
    
        // This return the labels (11h, 14h, ..., 22h, ..)
    NSArray *xAxisLabels = [GPHelpers getHoursList:fromStr to:toStr];
    
    NSUInteger labelLocation = 0;
    NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:[xAxisLabels count]];
    for (NSNumber *tickLocation in customTickLocations) {
        CPAxisLabel *newLabel = [[CPAxisLabel alloc] initWithText: [xAxisLabels objectAtIndex:labelLocation++] textStyle:axisSet.xAxis.labelTextStyle];
        newLabel.tickLocation = [tickLocation decimalValue];
        //newLabel.majorTickLocations = [tickLocation decimalValue];
        newLabel.offset = axisSet.xAxis.labelOffset + axisSet.xAxis.majorTickLength;                
        [customLabels addObject:newLabel];
        [newLabel release];
    }
    axisSet.xAxis.axisLabels =  [NSSet setWithArray:customLabels];
    

    1 回复  |  直到 10 年前
        1
  •  8
  •   Bob Jarvis - Слава Україні    11 年前

    为了结束这个问题,我得到了一个核心人物的答案:

    只需设置记号位置,添加以下语句:

    axisSet.xAxis.majorTickLocations = [NSSet setWithArray:customTickLocations]; 
    

    卢克