Пользовательские метки над гистограммой (CorePlot Framework) - PullRequest
1 голос
/ 07 сентября 2011

Я использовал CorePlot впервые и теперь хочу настроить гистограмму. Вы видите это на этой картинке.

enter image description here

Теперь я хочу добавить число над каждым баром сверху бара

надеюсь, вы понимаете, о чем я.

Как я могу это понять?

Это мой код

-(void) generateDataSamples
{
    int rawSamples [] = {1,3,6,2,1,1,3,15,2,1};
    int numSamples = sizeof(rawSamples) / sizeof(int);

    samples = [[NSMutableArray alloc] initWithCapacity:numSamples];

    for (int i = 0; i < numSamples; i++){
        double x = i;
        double y = rawSamples[i];
        NSDictionary *sample = [NSDictionary dictionaryWithObjectsAndKeys:
                                [NSNumber numberWithDouble:x],X_VAL,
                                [NSNumber numberWithDouble:y],Y_VAL,
                                nil];
        [samples addObject:sample];
    }   
}

- (void)viewDidLoad {

    [super viewDidLoad];

    [self generateDataSamples];

    double xAxisStart = 0;
    double xAxisLength = [samples count];

    double yAxisStart = 0;
    double yAxisLength = [[samples valueForKeyPath:@"@max.Y_VAL"] doubleValue];


    CPGraphHostingView *hostingView = [[CPGraphHostingView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:hostingView];

    CPXYGraph *graph = [[CPXYGraph alloc] initWithFrame:self.view.bounds];
    hostingView.hostedGraph = graph;



    CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;
    plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromDouble(0)
                                                   length:CPDecimalFromDouble(xAxisLength +1)];

    plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromDouble(0)
                                                   length:CPDecimalFromDouble(yAxisLength + 0.5)];  

    CPBarPlot *plot = [[CPBarPlot alloc] initWithFrame:CGRectZero];
    plot.plotRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromDouble(0.0)
                                                 length:CPDecimalFromDouble(xAxisLength)];

    CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet; 
    CPLineStyle *lineStyle = [CPLineStyle lineStyle]; 
    lineStyle.lineColor = [CPColor whiteColor]; 
    lineStyle.lineWidth = 1.0f; 
    CPTextStyle *cyanStyle = [CPTextStyle textStyle]; 
    cyanStyle.color = [CPColor cyanColor]; 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setMaximumFractionDigits:0]; 

    plot.barOffset = .5;
    plot.dataSource = self;


    [graph addPlot:plot];

    [plot release];
    [graph release];
    [hostingView release];
}

1 Ответ

1 голос
/ 08 сентября 2011

Если вы просто хотите использовать простые числовые метки, установите свойства labelTextStyle и labelFormatter на графике. Если вам нужны более сложные метки, вы можете добавить метод -dataLabelForPlot:recordIndex: в свой источник данных и создать свои собственные метки.

См. Примеры приложений, включенных в Core Plot, для примера кода. Механизм маркировки одинаков для всех типов графиков. «Вертикальная линейчатая диаграмма» в приложении Plot Gallery демонстрирует первую технику. Несколько других графиков в галерее графиков используют технику источника данных.

...