适用于iOS的Core Plot - 条形图上的数据标签显示两次

时间:2013-12-04 20:19:48

标签: ios charts core-plot cptbarplot

我是CorePlot库的新手。在我们的一个应用程序中,我们使用CorePlot绘制图表的条形图。 我们还为图表中的每个条形图显示数据标签。 我正在使用labelOffset在条形图中设置其位置(即labelOffset= -10.0) 但是,当图表中的某个条形图太小而无法容纳条形图中的数据标签时,我会设置labelOffset = 10.0,以便它可以显示在条形图上方作为默认值。

但是,我在CPTPlot中看到了这种奇怪的行为,其中它在条形图上绘制了两次数据标签。这是一个截图:

enter image description here

这是一个代码snipet:

    -(CPTTextLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)index
    {
    plot.labelFormatter = nil;
    plot. labelTextStyle = nil;
    if (self.showValuesAsPlotLabels)
    {
if (self.showValuesAsPlotLabels)
{
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];

    [numberFormatter setGeneratesDecimalNumbers:NO];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setMaximumFractionDigits:2];
    [numberFormatter setMinimumFractionDigits:2];

    CGFloat yValue = [self.chartData[index][1] floatValue];
    //return [NSString stringWithFormat:@"%f", yValue];
    NSString *labelStr = [numberFormatter stringFromNumber:@(yValue)];
    /* Check to see how tall is bar chart so that we can accordingly position data label */
    CGFloat yBaseOffsetValue = self.yAxisIntervalLength;
    CGFloat compareValue = (yBaseOffsetValue * self.divisor);
    UIColor *dataLabelColor;
    float dataLabelOffset = -10.0f;
    if (yValue > compareValue) {
        dataLabelColor = [UIColor whiteColor];
        plot.labelOffset = dataLabelOffset;
    } else {
        dataLabelColor = [UIColor blackColor];
        plot.labelOffset = (0.0f - dataLabelOffset);
    }
       return [[CPTTextLayer alloc] initWithText:labelStr style:[CPTTextStyle textStyleWithAttributes:@{NSForegroundColorAttributeName: dataLabelColor}]];
  }

  if (self.plotLabels == nil || self.plotLabels.count < index)
  {
       return nil;
  }

   NSString *identifier = (self.plotLabels)[index];

   CPTTextLayer *label = [[CPTTextLayer alloc] initWithText:identifier];

   return label;
}

我在这里错过了什么或做错了什么?

谢谢你。

修改 在Eric的建议之后,我尝试使用plot.identifier检查特定于情节的y值,然后相应地返回data {labelOffsettextStyle的dataLabel。但是,我现在在条形图上看到以下行为: enter image description here

我在想,dataLabelForPlot:recordIndex:是否使用CPTTextLayer的相同实例?有没有办法可以为每个不同的CPTTextLayer

分别设置CPTBarPlot个实例

由于

0 个答案:

没有答案