CorePlot:在每月ScatterPlot缩放时更改数据源

时间:2013-11-08 04:44:09

标签: ios objective-c core-plot

我有一个工作的散点图,显示每月平均记录的权重。我不知道这是否可行,但我希望在放大时将其转换为基于日期的图表,并在缩小时将其转换为每月图表。

我尝试使用

-(void)scaleBy: (CGFloat)interactionScale aboutPoint: (CGPoint)interactionPoint

但是如果使用interactionScale

进行放大或缩小,我无法理解

如果需要,这是数据源代码

- (NSNumber *)numberForPlot: (CPTPlot *)plot field: (NSUInteger)fieldEnum recordIndex: (NSUInteger)index {
    switch (fieldEnum) {
        case CPTScatterPlotFieldX: 
            if (index < 13) {
                if (index == 0)
                    return nil;

                //NSLog(@"x coordinate: %i",index);
                return [NSNumber numberWithUnsignedInteger: index];
            }
            break;

        case CPTScatterPlotFieldY: 
            if (index == 0)
                return nil;

            //NSLog(@"y coordinate: %i", [[weights objectAtIndex: index]integerValue]);

            if ([[weights objectAtIndex: index]integerValue] <= 0)
                return nil;
            else return [NSNumber numberWithUnsignedInteger: [[weights objectAtIndex: index]integerValue]];

            break;
    }

    return [NSDecimalNumber zero];
}

- (CPTLayer *)dataLabelForPlot: (CPTPlot *)plot recordIndex: (NSUInteger)idx {
    CPTMutableTextStyle *axisTitleTextStyle = [CPTMutableTextStyle textStyle];
    axisTitleTextStyle.fontSize = 10.0;
    axisTitleTextStyle.fontName = @"Helvetica-Bold";
    axisTitleTextStyle.color = [CPTColor whiteColor];

    CPTTextLayer *label = [[CPTTextLayer alloc] init];
    label.textStyle = axisTitleTextStyle;
    label.text =  [NSString stringWithFormat: @"%.2f", [[weights objectAtIndex: idx] floatValue]];

    return label;
}

1 个答案:

答案 0 :(得分:0)

您需要做的不仅仅是更改要从摘要更改为详细数据的绘图范围(这是-scaleBy:aboutPoint:所做的)。您还需要为绘图提供新数据(-reloadData)并更新轴标签以指示新的比例。

如果您需要更改状态以响应用户操作,例如,当用户缩放超过某个点时,请使用代理监视对绘图空间范围的更改,并在超过更改阈值时更新数据和标签。< / p>