Цель: создание столбцов с фиксированной шириной месяцев для данных.
Проблема: ширина столбца зависит от точки #data. Следовательно, некоторые ярлыки группируются вместе
(например, "JanFeb" и "Jan....Feb") из-за отсутствия данных за конкретный месяц.
Следующий фрагмент кода создает новые метки в месяц, но не управляет статическим размещением меток по оси x; поэтому некоторые метки могут объединяться, если для этого конкретного месяца существует мало элементов данных (меньше точек):
for (PerformanceDataItem *item in perfDataArray) {
if (![item.month isEqualToString:currentMonth]) {
currentMonth = item.month;
CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText:item.month textStyle:x.labelTextStyle];
newLabel.tickLocation = [[NSDecimalNumber numberWithInt:index] decimalValue];
newLabel.offset = 2;
[customLabels addObject:newLabel];
[newLabel release];
}
++index;
} // end for().
x.axisLineStyle = nil;
x.majorTickLineStyle = nil;
x.minorTickLineStyle = nil;
x.labelingPolicy = CPTAxisLabelingPolicyNone;
NSSet* customlabelSet = [NSSet setWithArray:customLabels];
x.axisLabels = customlabelSet;
Вопрос. Как создать настраиваемый набор столбцов фиксированной ширины для отображения данных?
...merely setting x.labelingPolicy to
CPTAxisLabelingPolicyFixedIntervalclutters the x-axis with a lot of numerals (1.0 - x.0) vs using my own NSString labels.
Также пробовали: а) изменить plotSpace.xRange; и б) изменение x.majorIntervalLength.
Предпочтение: пользовательский ярлык для: CPTAxisLabelingPolicyFixedInterval
P.S. Я предполагаю, что расширение тонких столбцов (с меньшим количеством данных) просто нанесет экстраполяцию на следующую точку данных следующего месяца; без необходимости заполнять какие-либо отсутствующие точки данных, чтобы сравняться с набором точек за соседний месяц.
============================
Решение на основе комментария:
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromUnsignedInteger(0) length:CPTDecimalFromUnsignedInteger(100)];
axisFixedInterval.majorIntervalLength = CPTDecimalFromDouble(25.0); NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
// Set begining date to April 1, 2012: [dateComponents setMonth:4]; [dateComponents setDay:1]; [dateComponents setYear:2012]; [dateComponents setHour:0]; [dateComponents setMinute:0]; [dateComponents setSecond:0]; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *refDate = [gregorian dateFromComponents:dateComponents]; [dateComponents release]; [gregorian release]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.dateStyle = kCFDateFormatterMediumStyle; [dateFormatter setDateFormat:@"MMM"]; CPTCalendarFormatter *calFormatter = [[[CPTCalendarFormatter alloc] initWithDateFormatter:dateFormatter] autorelease]; calFormatter.referenceDate = refDate; calFormatter.referenceCalendarUnit = kCFCalendarUnitMonth; axisFixedInterval.labelFormatter = calFormatter; [dateFormatter release];
... это дало бы мне фиксированное распределение трехсимвольных месяцев: [апрель, май, июнь, июль, август]; для 5 галочек.
... из примера plot_gallery_ios.