【问题标题】:Core-Plot CPTScatterPlot data labelsCore-Plot CPTScatterPlot 数据标签
【发布时间】:2013-02-16 21:56:19
【问题描述】:

当您创建散点图时,它会自动标记图表上的点。我觉得这很烦人,想把它关掉,因为它对我们正在做的事情没有用。有没有不去掉所有标签的方法?

为了清楚,这些显示没有添加任何注释。我想删除这个默认行为。

我想删除图中的 1、2、3、4、5、6、7 等。

这是我用来创建图表的代码。如您所见,它没有设置任何注释等。

    -(void) constructScatterPlot
    {
    // Create graph from theme
    graph = [[CPTXYGraph alloc] initWithFrame:CGRectZero];
    CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme];
    [graph applyTheme:theme];
    scatterPlotView.hostedGraph = graph;

    graph.paddingLeft   = 0.0;
    graph.paddingTop    = 0.0;
    graph.paddingRight  = 0.0;
    graph.paddingBottom = 0.0

    // Setup plot space
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
    plotSpace.allowsUserInteraction = NO;
    plotSpace.xRange                = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-2.5) length:CPTDecimalFromFloat(28)];
    plotSpace.yRange                = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-5) length:CPTDecimalFromFloat(desiredPeak+10)];

    NSArray *exclusionRanges = [NSArray arrayWithObjects:[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-1) length:CPTDecimalFromFloat(-100)],
                                                         [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(25) length:CPTDecimalFromFloat(10000)], nil];

    // Axes
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;

    CPTXYAxis *x          = axisSet.xAxis;
    x.majorIntervalLength         = CPTDecimalFromString(@"4");
    x.minorTicksPerInterval = 4;
    x.minorTickLength = 5.0f;
    x.majorTickLength = 7.0f;
    x.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0");
    x.minorTicksPerInterval       = 10;
    x.labelExclusionRanges = exclusionRanges;

    exclusionRanges = [NSArray arrayWithObjects:[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-1) length:CPTDecimalFromFloat(-100)],
                                                [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(101) length:CPTDecimalFromFloat(10000)], nil];
    CPTXYAxis *y = axisSet.yAxis;
    y.majorIntervalLength         = CPTDecimalFromString(@"10");
    y.minorTicksPerInterval       = 20;
    y.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0");
    y.labelExclusionRanges = exclusionRanges;

    // Put an area gradient under the plot above
    CPTColor *areaColor       = [CPTColor colorWithComponentRed:0.3 green:1.0 blue:0.3 alpha:0.8];
    CPTGradient *areaGradient = [CPTGradient gradientWithBeginningColor:areaColor endingColor:[CPTColor clearColor]];
    areaGradient.angle = -90.0f;
    CPTFill *areaGradientFill = [CPTFill fillWithGradient:areaGradient];

    // Create a blue plot area
    CPTScatterPlot *boundLinePlot = [[CPTScatterPlot alloc] init];
    boundLinePlot.identifier = @"Blue Plot";

    CPTMutableLineStyle *lineStyle = [boundLinePlot.dataLineStyle mutableCopy];
    //lineStyle.miterLimit = 1.0f;
    lineStyle.lineWidth  = 3.0f;
    lineStyle.lineColor  = [CPTColor blueColor];
    lineStyle.dashPattern = [NSArray arrayWithObjects:[NSNumber numberWithFloat:5.0f], [NSNumber numberWithFloat:5.0f], nil];
    boundLinePlot.dataSource     = self;
    boundLinePlot.cachePrecision = CPTPlotCachePrecisionDecimal;//Double;
    boundLinePlot.interpolation  = CPTScatterPlotInterpolationCurved;//Histogram;
    [graph addPlot:boundLinePlot];

    // Do a blue gradient
    CPTColor *areaColor1       = [CPTColor colorWithComponentRed:0.3 green:0.3 blue:1.0 alpha:0.8];
    CPTGradient *areaGradient1 = [CPTGradient gradientWithBeginningColor:areaColor1 endingColor:[CPTColor clearColor]];
    areaGradient1.angle         = -90.0f;
    areaGradientFill            = [CPTFill fillWithGradient:areaGradient1];
    boundLinePlot.areaFill      = areaGradientFill;
    boundLinePlot.areaBaseValue = [[NSDecimalNumber zero] decimalValue];

    CABasicAnimation *fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    fadeInAnimation.duration            = 1.0f;
    fadeInAnimation.removedOnCompletion = NO;
    fadeInAnimation.fillMode            = kCAFillModeForwards;
    fadeInAnimation.toValue             = [NSNumber numberWithFloat:1.0];
    [boundLinePlot addAnimation:fadeInAnimation forKey:@"animateOpacity"];
}

所以有些东西是默认开启的..

感谢所有帮助。

-大卫

【问题讨论】:

  • symbolTextAnnotation = nil
  • 我应该在哪里设置这个?我没有设置任何东西,注释等。

标签: ios core-plot


【解决方案1】:

您也可以通过以下方式使其出现在图表上:

    -(void)scatterPlot:(CPTScatterPlot *)plot
plotSymbolWasSelectedAtRecordIndex:(NSUInteger)index
{
    int plotNumber = 0;

    for (int i = 0; i < [mainDataForPlot count]; i++)
    {
        if ([mainDataForPlot objectAtIndex:i] != [NSNull null]
            &&
            [(NSString *)plot.identifier isEqualToString:
             [NSString stringWithFormat:@"%@-%@",[[mainDataForPlot objectAtIndex:i] objectAtIndex:0],[[mainDataForPlot objectAtIndex:i] objectAtIndex:1]]
             ]) 
        {
            plotNumber = i;
            break;
        }
    }

    if (self.symbolTextAnnotation != nil) 
    {
        self.symbolTextAnnotation = nil;
    }

    // Setup a style for the annotation
    CPTMutableTextStyle *hitAnnotationTextStyle = [CPTMutableTextStyle textStyle];
    hitAnnotationTextStyle.color = [CPTColor whiteColor];
    hitAnnotationTextStyle.fontSize = 16.0f;
    hitAnnotationTextStyle.fontName = @"Helvetica-Bold";

    // Determine point of symbol in plot coordinates
    NSNumber *x = [NSNumber numberWithInt:index];
    NSNumber *y = [[[mainDataForPlot objectAtIndex:plotNumber] objectAtIndex:3] objectAtIndex:index];
    NSArray *anchorPoint = [NSArray arrayWithObjects:x, y, nil];

    // Add annotation
    // First make a string for the y value
    NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
    [formatter setMaximumFractionDigits:2];
    NSString *yString = [formatter stringFromNumber:y];

    // Now add the annotation to the plot area
    CPTTextLayer *textLayer = [[[CPTTextLayer alloc] initWithText:yString style:hitAnnotationTextStyle] autorelease];
    self.symbolTextAnnotation = [[[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:(CPTXYPlotSpace *)self.graph.defaultPlotSpace  anchorPlotPoint:anchorPoint] autorelease];
    self.symbolTextAnnotation.contentLayer = textLayer;
    self.symbolTextAnnotation.displacement = CGPointMake(0.0f, 20.0f);
    [graph.plotAreaFrame.plotArea addAnnotation:symbolTextAnnotation];

}

【讨论】:

  • 你读过这个问题吗?我在问如何让这些不出现。我没有添加任何注释。
  • 大卫 我明白你的问题。我是在指出它们可能来自哪里,而不是如何添加它们。您应该至少发布一些代码,以便任何人能够进一步帮助您。祝你好运。
  • 这很简洁,casillic。谢谢!
【解决方案2】:

默认情况下不显示“数据标签”(每个点上方的标签)。自动标签需要labelTextStylelabelFormatter。这两个属性都默认为nil,它隐藏了标签。

【讨论】:

  • 那么我在哪里设置为零?在图表本身上?还是剧情?
  • 刚试过:boundLinePlot.labelTextStyle = nil; boundLinePlot.labelFormatter = nil;没有变化。
  • 你实现了哪些数据源方法? -dataLabelForPlot:recordIndex: 显然也会显示数据标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多