核心情节 - 饼图未显示足够的细分

时间:2011-09-20 15:21:15

标签: iphone objective-c ios core-plot

numberOfRecordsForPlot:...我有这段代码:

int count = [[optsDict objectForKey:@"Values"] count];
NSLog(@"pie count: %i", count);
return count;

它输出pie count: 4因此(除非我误解)饼图中应该有4个段。

然后在numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index我有这个:

double percentage = ((float)counter/(float)total)*100;
num = (NSDecimalNumber *)[NSDecimalNumber numberWithInt:(int)percentage];

NSLog(@"index: %i, percentage: %f", index, percentage);
NSLog(@"%@", num);

return num;

输出:

index: 0, percentage: 9.090909
9
index: 1, percentage: 9.090909
9
index: 2, percentage: 63.636364
63
index: 3, percentage: 18.181818
18

所以我假设(合理地)该函数为每个段运行一次,并为所有段返回一个数字!

然而,图表看起来像这样:

enter image description here

我不能告诉你其他的事情。这就是我所知道的,我对核心情节了解不多!

如果有任何帮助你可以给我,我会非常感激!

谢谢

4 个答案:

答案 0 :(得分:1)

我玩你的价值观,我想我在你的代码中发现了问题。

尝试返回班级-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index的{​​{1}}对象

NSNumber

我在CorePlot框架中包含的示例中对此进行了测试。首先,我尝试使用num = (NSNumber *)[NSNumber numberWithInt:(int)percentage]; return num; 初始化contentArray数组:

NSNumbers

一切都很完美。然后我尝试使用NSMutableArray *contentArray = [NSMutableArray arrayWithObjects:[NSNumber numberWithInt:9.0909099], [NSNumber numberWithInt:9.0909099], [NSNumber numberWithInt:63.63636463], [NSNumber numberWithInt:18.181818], nil];

在代码中初始化数组
NSDecimalNumbers

我收到了你的双色图表。

希望这会帮助你=)

答案 1 :(得分:0)

您是否实施

- (CPTFill *)sliceFillForPieChart:(CPTPieChart *)pieChart recordIndex:(NSUInteger)index

在CPTPieChartDataSource协议中?由于各部分之间没有边界线,因此可能会使用相同的颜色绘制几个边界线。确保为每个索引返回不同颜色的CPTFill。

答案 2 :(得分:0)

托马斯我用钛框架完成了这个pia图表。你必须使用java脚本来显示pia图表

答案 3 :(得分:0)

看起来你错过了第一和第二片。 numberOfRecordsForPlot可以返回4,但在numberForPlot中,某些代码返回nil ..我创建了一个带有您的值的新饼图,并且一切正常。请参阅下面的代码。

您还可以尝试查看-(CPLayer *)dataLabelForPlot:(CPPlot *)plot recordIndex:(NSUInteger)index委托方法中每个切片的数据标签。如果你真的有4个切片,那么其中2个将放在同一个位置。下面的代码也是如此。

enter image description here

-(void) viewDidLoad{
    NSMutableArray *contentArray = [NSMutableArray arrayWithObjects:[NSNumber numberWithInt:9], [NSNumber numberWithInt:9], [NSNumber numberWithInt:63], [NSNumber numberWithInt:18], nil];
    self.dataForChart = contentArray;

    // Add pie chart
    CPPieChart *piePlot = [[CPPieChart alloc] init];
    piePlot.dataSource = self;
    piePlot.pieRadius = 100.0;
    piePlot.identifier = @"Pie Chart 1";
    piePlot.startAngle = M_PI;
    piePlot.sliceDirection = CPPieDirectionClockwise;
    piePlot.delegate = self;
    [pieChart addPlot:piePlot];
    [piePlot release];
}

#pragma mark -
#pragma mark Plot Data Source Methods
-(NSUInteger)numberOfRecordsForPlot:(CPPlot *)plot{
    return [self.dataForChart count];
}

-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {
    if ( index >= [self.dataForChart count] ) return nil;

    if ( fieldEnum == CPPieChartFieldSliceWidth ) {
        return [self.dataForChart objectAtIndex:index];
    }
    else {
        return [NSNumber numberWithInt:index];
    }
}

-(CPLayer *)dataLabelForPlot:(CPPlot *)plot recordIndex:(NSUInteger)index {
    CPTextLayer *label = [[CPTextLayer alloc] initWithText:[NSString stringWithFormat:@"%lu", index]];
    label.textStyle.color = [CPColor lightGrayColor];
    return [label autorelease];
}