2013-02-16 61 views
2

当您创建散点图时,它会自动标记图上的点。我觉得这很烦人,想关闭它,因为它对我们正在做的事没有用处。有没有删除所有标签的方法?Core-Plot CPTScatterPlot数据标签

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

enter image description here

我想删除的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"]; 
} 

因此,一些被默认开启..

感谢任何及所有的帮助。

-David

+0

symbolTextAnnotation = nil – casillic 2013-02-17 00:37:33

+0

我在哪里设置?我没有设置任何东西,注释等。 – 2013-02-17 06:17:03

回答

1

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

+0

那么我把它设置为零?在图上?或情节? – 2013-02-17 22:41:50

+0

刚刚尝试过:boundLinePlot.labelTextStyle = nil; boundLinePlot.labelFormatter = nil; 没有变化。 – 2013-02-17 22:44:54

+1

你实现了哪些数据源方法? '-dataLabelForPlot:recordIndex:'显然也会显示数据标签。 – 2013-02-17 23:23:25

5

你也可以让它出现在图形上,如果你通过触摸:

-(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]; 

} 
+0

你读过这个问题吗?我在问如何让这些不出现。我没有添加任何注释。 – 2013-02-17 06:15:28

+0

大卫我明白你的问题。我指出他们可能来自哪里,而不是如何添加它们。您应该至少发布一些代码,以便任何人都能够进一步帮助您。祝你好运。 – casillic 2013-02-17 15:57:53

+0

这是相当整洁,casillic。谢谢! – jay492355 2013-06-14 18:50:00