Подтвердить что ты не робот

Как вы предоставляете метки для оси диаграммы основного графика?

Я использую структуру Core Plot и пытаюсь работать с примерами приложений. Существуют ли учебные пособия для использования этой структуры?

В частности, как вы предоставляете метки для осей X и Y в диаграмме?

4b9b3361

Ответ 1

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

Например, чтобы предоставить метки пользовательских осей, посмотрите исходный файл CPTestApp-iPhone CPTestAppBarChartController.m. Гистограмма в этом примере имеет пользовательские метки оси X, определенные следующим кодом:

// Define some custom labels for the data elements
x.labelRotation = M_PI/4;
x.labelingPolicy = CPAxisLabelingPolicyNone;
NSArray *customTickLocations = [NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:1], [NSDecimalNumber numberWithInt:5], [NSDecimalNumber numberWithInt:10], [NSDecimalNumber numberWithInt:15], nil];
NSArray *xAxisLabels = [NSArray arrayWithObjects:@"Label A", @"Label B", @"Label C", @"Label D", @"Label E", nil];
NSUInteger labelLocation = 0;
NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:[xAxisLabels count]];
for (NSNumber *tickLocation in customTickLocations) {
    CPAxisLabel *newLabel = [[CPAxisLabel alloc] initWithText: [xAxisLabels objectAtIndex:labelLocation++] textStyle:x.labelTextStyle];
    newLabel.tickLocation = [tickLocation decimalValue];
    newLabel.offset = x.labelOffset + x.majorTickLength;
    newLabel.rotation = M_PI/4;
    [customLabels addObject:newLabel];
    [newLabel release];
}

x.axisLabels =  [NSSet setWithArray:customLabels];

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

Ответ 2

Чтобы предоставить пользовательские отформатированные метки, вы можете назначить форматирование свойства labelFormatter оси. Вы можете использовать NSNumberFormatter, настроенный для ваших предпочтений, например:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
// ... configure formatter

CPTXYAxis *y = axisSet.yAxis;
y.labelFormatter = formatter;

Или, если вам нужно более точное форматирование, вы можете подклассом NSNumberFormatter и переопределить метод stringForObjectValue:, чтобы сделать точный форматирование, которое вы хотели бы.