У меня есть 2 графика, которые я показываю в контроллере вида. Ось y - это значение времени, записанное и x данные, затухание ветра, порыв, среднее. Моя проблема в том, что сбор данных в моем массиве длится около 8-10 часов. поэтому когда-то первое значение будет 19:00 ночью, а последнее будет сказано 05:00 утра. Теперь, если я попытаюсь поместить это в диаграмму рассеяния, данные будут повсюду, а не в последовательности. если я просто использую номер индекса массивов, который он красиво рисует, но данные не всегда хронологические, иногда может пройти час, где нет данных. Когда я меняю ось y на записанное значение времени, я конвертирую, чтобы сказать 19,0 и 5,0 от HH: mm: ss и в примере выше, и график неправильный, как вы можете видеть ниже. Я добавил пользовательские метки и т. Д. На ось y, но вам нужен способ сделать его линейным?Программное решение для пользовательской оси y
EDIT:
я хочу для оси х, чтобы выглядеть, как показано ниже, за исключением числа осей работает, как показано ниже, когда данные предыдущий день и текущий день ??:
19 , 20,21,22,23,24,1,2,3,4,5,6
В настоящее время у меня есть петля этикетки клиента, чтобы сделать именно это, но данные все еще обтекают?
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat([xFirstEntry integerValue]) length:CPTDecimalFromFloat(10.5)];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0) length:CPTDecimalFromFloat([yMaxValue integerValue]+12)];
plotSpace.globalXRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble([xFirstEntry integerValue]) length:CPTDecimalFromDouble(10.5)];
plotSpace.globalYRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0) length:CPTDecimalFromDouble([yMaxValue doubleValue]*1.23)];
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;
CPTXYAxis *x = axisSet.xAxis;
x.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"1"] decimalValue];
x.axisConstraints = [CPTConstraints constraintWithLowerOffset:0];
x.labelingPolicy = CPTAxisLabelingPolicyNone;
xFirstEntry = [[[changedArray objectAtIndex:0]objectForKey:@"date"] substringFromIndex:11];
xFirstEntry = [xFirstEntry substringToIndex:[xFirstEntry length] - 6];
xLastEntry = [[[changedArray objectAtIndex:changedArray.count-1]objectForKey:@"date"] substringFromIndex:11];
xLastEntry = [xLastEntry substringToIndex:[xLastEntry length] - 6];
NSLog(@"%@ %@", xFirstEntry, xLastEntry);
NSMutableArray *xCustomTickLocations = [[NSMutableArray alloc]init];
NSMutableArray *xCustomAxisLabels = [[NSMutableArray alloc]init];
NSInteger newValue = [xFirstEntry integerValue];
if ([xFirstEntry integerValue] > [xLastEntry integerValue]) {
NSLog(@"gretaer than");
while (newValue <= 24) {
[xCustomTickLocations addObject:[NSDecimalNumber numberWithInt:newValue]];
[xCustomAxisLabels addObject:[NSString stringWithFormat:@"%d",newValue]];
newValue++;
}
newValue = 1;
[xCustomTickLocations addObject:[NSDecimalNumber numberWithInt:newValue]];
[xCustomAxisLabels addObject:[NSString stringWithFormat:@"%d",newValue]];
while (newValue <= [xLastEntry integerValue]+1) {
[xCustomTickLocations addObject:[NSDecimalNumber numberWithInt:newValue]];
[xCustomAxisLabels addObject:[NSString stringWithFormat:@"%d",newValue]];
newValue++;
}
}
else {
NSLog(@"less than");
while (newValue <= [xLastEntry integerValue]+1) {
[xCustomTickLocations addObject:[NSDecimalNumber numberWithInt:newValue]];
[xCustomAxisLabels addObject:[NSString stringWithFormat:@"%d",newValue]];
newValue++;
}
}
NSUInteger XlabelLocation = 0;
CPTMutableTextStyle *xLabelStyle = [CPTMutableTextStyle textStyle];
xLabelStyle.color = [[CPTColor whiteColor] colorWithAlphaComponent:1];
xLabelStyle.fontName = @"Helvetica-Bold";
xLabelStyle.fontSize = 9.0f;
NSMutableArray *XcustomLabels = [NSMutableArray arrayWithCapacity:[xCustomAxisLabels count]];
for (NSNumber *XtickLocation in xCustomTickLocations) {
CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText: [xCustomAxisLabels objectAtIndex:XlabelLocation++] textStyle:xLabelStyle];
newLabel.tickLocation = [XtickLocation decimalValue];
newLabel.offset = 2;
newLabel.rotation=M_PI_2;
[XcustomLabels addObject:newLabel];
}
x.axisLabels = [NSSet setWithArray:XcustomLabels];
извините, вероятно, не объясниться должным образом. добавили изображение того, как я хотел бы его посмотреть, кроме 19,20,21,22,23,24,1,2,3,4,5,6 – veggyaurus
Используйте вариант №2 в своем ответе (шкала времени) , Установите ось 'xRange', чтобы начать с 1900 в первый день и иметь длину 11 часов. –