У меня проблема с CPTBarPlot в Core Plot на Какао.
А именно, я не могу добиться, чтобы контролировать ширину шага баров. Тики по оси X обычно задаются как целое число от 1 до бесконечности, и рисование на нем графика рассеяния работает.
Однако, когда рисуется гистограмма, только первые столбцы начинаются (с правильным смещением, конечно) с первого тика. Второе немного дальше от его галочки, третье и все остальные, как показано на скриншоте:
Я не нашел ни одного свойства для управления этим, однако нашел метод источника данных
-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
Ведет себя иначе, чем когда я рисую Scatter Plot. а именно, он перечисляет только целое число 3, которое является CPTBarPlotBindingBarTips и не перечисляет другие константы, особенно меня беспокоит отсутствие CPTBarPlotBindingBarLocations.
Если я запускаю VerticalBarChart из демонстрационного проекта Mac для Plot Gallery, я проверил и увидел, что тот же метод перечисляет 3,4 и 2 константы в том же порядке.
Я использую Core Plot 0.9, а именно, я верю так же, как в этой демонстрации. Тем не менее ...
Как это решить?
Вот полный код для меток и отметок на оси X;
x.labelRotation = M_PI/4;
x.labelingPolicy = CPTAxisLabelingPolicyNone;
x.labelOffset = 0.0;
CPTMutableTextStyle *labelStyle = [CPTMutableTextStyle textStyle];
labelStyle.fontSize = 9.0;
x.labelTextStyle = labelStyle;
// NSMutableArray *dateArray = [dataSeries objectAtIndex:0];
NSMutableArray *customTickLocations = [NSMutableArray array];
NSMutableArray *xAxisLabels = [NSMutableArray array];
for (int i=0;i<[dataSeries count];i++) {
[customTickLocations addObject:[NSDecimalNumber numberWithInt:i+1]];
[xAxisLabels addObject:[dataSeries objectAtIndex:i]];
}
// [customTickLocations addObject:[NSDecimalNumber numberWithInt:[dateArray count]]];
NSUInteger labelLocation = 0;
NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:[xAxisLabels count]];
for (NSNumber *tickLocation in customTickLocations) {
CPTAxisLabel *newLabel = [[CPTAxisLabel 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 setMajorTickLocations:[NSSet setWithArray:customTickLocations]];
x.axisLabels = [NSSet setWithArray:customLabels];
Я должен добавить, что одни и те же галочки используются, когда график рассеяния рисуется на одном и том же участке графика, и он идеально соответствует ....