2013-09-17 2 views
0

Я могу нарисовать стеклянную гистограмму с помощью основного участка. Моя проблема в том, что я не могу поместить ярлык поверх уложенной гистограммы. Для создания бара я сделал следующие вещиЯрлык баров не отображается поверх бара с использованием основного графика

enter image description here

for (NSString *set in [[barChartidentifiers allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]) { 
    CPTBarPlot *plot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor blueColor] horizontalBars:NO]; 
    plot.lineStyle = barLineStyle; 
    CGColorRef color = ((UIColor *)[barChartidentifiers objectForKey:set]).CGColor; 
    plot.fill = [CPTFill fillWithColor:[CPTColor colorWithCGColor:color]]; 
    if (firstPlot) { 
     plot.barBasesVary = NO; 
     firstPlot = NO; 
    } else { 
     plot.barBasesVary = YES; 
    } 
    plot.barWidth = CPTDecimalFromFloat(0.5); 
    plot.barsAreHorizontal = NO; 
    plot.labelTextStyle = [CPTTextStyle textStyle]; 
    plot.dataSource = self; 
    plot.identifier = set; 
    [graph addPlot:plot toPlotSpace:graph.defaultPlotSpace]; 
} 

и ниже код я пишу в

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index 
    NSNumber *num; 
    if (fieldEnum == 0) { 
     num = [NSNumber numberWithInt:index]; 
    } 

    else { 
     double offset = 0; 
     if (((CPTBarPlot *)plot).barBasesVary) { 
      for (NSString *set in [[barChartidentifiers allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]) { 
       if ([plot.identifier isEqual:set]) { 
        break; 
       } 
       offset += [[[data objectForKey:[dates objectAtIndex:index]] objectForKey:set] doubleValue]; 


      } 
     } 

     //Y Value 
     if (fieldEnum == 1) { 
      num =[NSNumber numberWithDouble:[[[data objectForKey:[dates objectAtIndex:index]] objectForKey:plot.identifier] doubleValue] + offset]; 
     } 

     //Offset for stacked bar 
     else { 
      num =[NSNumber numberWithDouble:offset]; 
     } 
    } 

    //NSLog(@"%@ - %d - %d - %f", plot.identifier, index, fieldEnum, num); 

    return num; 
} 
+0

Вы должны использовать значения перечисления для полей графика вместо магических чисел: 'CPTBarPlotFieldBarLocation',' CPTBarPlotFieldBarTip' и 'CPTBarPlotFieldBarBase'. –

ответ

1

Вы можете быть в состоянии отрегулировать labelOffset каждого участка. Попробуйте отрицательное значение, чтобы поместить ярлык поверх своего графика, а не застревать под другим сюжетом.

Еще одна вещь, которую нужно попробовать - добавить графики в обратном порядке, чтобы нижние графики и их ярлыки находились поверх этих выше. В вашем примере желтый график будет первым, зеленый второй и т. Д.

Если все остальное не удается, сделайте свои собственные ярлыки, используя аннотации пространственных пространств. Это даст большую гибкость в размещении этикеток. Например, вы можете поместить метки рядом с барами, а не сверху.

+0

Спасибо Эрик labelOffset работает для меня. Не могли бы вы пояснить, что в чем разница между CPTBarPlotFieldBarLocation и CPTBarPlotFieldBarBase? – Gyanendra

+0

Расположение бара - это положение стержня вдоль оси (ось x для вертикальных стержней и ось y для горизонтальных полос). Значение наконечника - это один конец бара. Базовое значение - это другой конец панели. Если 'barBasesVary' является' NO', все бары разделяют «baseValue» графика. Если 'YES', источник данных будет запрошен для значения' CPTBarPlotFieldBarBase' для каждого бара. –

+0

Большое спасибо Эрик – Gyanendra

Смежные вопросы