2011-09-20 38 views
0

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

即使世界真的沒有別的太多我可以告訴你。就我所知,我對核心情節瞭解不多!

如果有任何幫助你可以給我,我會非常感激!

謝謝

+0

什麼顏色用於圖表繪製? – beryllium

+0

我沒有選擇任何。但我然後將顏色設置爲漸變,肯定有兩個切片... –

+0

檢查我的答案,並告訴我,如果它解決了您的問題 – Nekto

回答

1

我與你的價值觀玩,我想我發現在你的代碼的問題。

嘗試在-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index對象返回樣品包含在CorePlot框架NSNumber

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

NSMutableArray *contentArray = [NSMutableArray arrayWithObjects:[NSDecimalNumber numberWithInt:9.0909099], [NSDecimalNumber numberWithInt:9.0909099], [NSDecimalNumber numberWithInt:63.63636463], [NSDecimalNumber numberWithInt:18.181818], nil]; 

而且我已經收到您的確切雙色圖。

希望這會幫助你=)

+0

這就是它!餅圖似乎很完美!我甚至都沒有想過這個! :) 非常感謝。很高興。有150代表樂意。 –

+0

我必須等3小時才能發送代表。 :)對不起。 –

+0

哦,很高興在這裏=)我現在正在使用CorePlot,它很難與它一起工作,文檔非常糟糕......有時我正在尋找源代碼來了解它是如何工作的。所以關於CorePlot有很多問題並且答案太少是正常的。 – Nekto

0

你實現

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

這是在CPTPieChartDataSource協議?由於各部分之間沒有邊界線,因此可能會用相同的顏色繪製幾個邊界線。確保你爲每個索引返回一個不同顏色的CPTFill。

+0

我做了一個漸變,但肯定只有兩個切片。 –

0

托馬斯我做了使用鈦framework.You必須使用Java腳本顯示PIA圖表

+0

感謝您的提示,但我在一個頁面上顯示了很多圖表(在表格視圖中),並且許多網頁瀏覽會非常慢。 :)我也沒有使用鈦框架。我正在使用iOS –

0

它看起來像你錯過了第一和第二片段這PIA圖。 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]; 
}