Я думал, что это будет слишком запутанно, чтобы читать в комментариях, поэтому я перехожу к ответу.
В вашем методе numberForPlot
попробуйте что-то вроде следующего:
- (NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {
if (fieldEnum == CPScatterPlotFieldX) {
// should return data for x axis point;
return [[myDataArray objectAtIndex:index] objectAtIndex:index];
}
else {
// y axis point;
return [NSDecimalNumber numberWithInt:index];
}
}
Я прошу прощения, если это довольно грубо.Я просто переписал немного с гистограммы, чтобы разбросать график.Но это должно сработать.Я думаю, проблема была в том, что ты звонил objectAtIndex:fieldEnum
.Это немного запутало меня, когда я впервые начал использовать CorePlot.Опять же, если это не поможет, просто скажите, и мы попробуем что-то новое.Но я считаю, что это должно сделать это, или что-то очень похожее.
РЕДАКТИРОВАТЬ: В примере кода, предоставляемого с CorePlot, вот код для самих данных:
-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {
NSDecimalNumber *num = nil;
if ( [plot isKindOfClass:[CPPieChart class]] ) {
if ( index >= [self.dataForChart count] ) return nil;
if ( fieldEnum == CPPieChartFieldSliceWidth ) {
num = [self.dataForChart objectAtIndex:index];
}
else {
num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index];
}
}
else if ( [plot isKindOfClass:[CPBarPlot class]] ) {
switch ( fieldEnum ) {
case CPBarPlotFieldBarLocation:
if ( index == 4 ) {
num = [NSDecimalNumber notANumber];
}
else {
num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index];
}
break;
case CPBarPlotFieldBarTip:
if ( index == 8 ) {
num = [NSDecimalNumber notANumber];
}
else {
num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:(index+1)*(index+1)];
if ( [plot.identifier isEqual:@"Bar Plot 2"] ) {
num = [num decimalNumberBySubtracting:[NSDecimalNumber decimalNumberWithString:@"10"]];
}
}
break;
}
}
else {
if ( index % 8 ) {
num = [[dataForPlot objectAtIndex:index] valueForKey:(fieldEnum == CPScatterPlotFieldX ? @"x" : @"y")];
// Green plot gets shifted above the blue
if ( [(NSString *)plot.identifier isEqualToString:@"Green Plot"] ) {
if ( fieldEnum == CPScatterPlotFieldY ) {
num = (NSDecimalNumber *)[NSDecimalNumber numberWithDouble:[num doubleValue] + 1.0];
}
}
}
else {
num = [NSDecimalNumber notANumber];
}
}
return num;
}
Извините за включениевсе это, но я подумал, что это могло бы облегчить просмотр всех типов, чтобы лучше дифференцировать подход к точечной диаграмме.Создавая свои данные, это выглядит так:
NSMutableArray *contentArray = [NSMutableArray arrayWithCapacity:100];
NSUInteger i;
for ( i = 0; i < 60; i++ ) {
id x = [NSNumber numberWithFloat:1+i*0.05];
id y = [NSNumber numberWithFloat:1.2*rand()/(float)RAND_MAX + 1.2];
[contentArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:x, @"x", y, @"y", nil]];
}
self.dataForPlot = contentArray;
Так что, возможно, если вы попробуете подобный формат, это может сработать.Если это не помогает, то мы знаем, что это проблема с созданием графика, а не с данными