2017-08-08 154 views
1

我正在使用Daniel Gindi的圖表。在正常情況下,數值高於圓圈;iOS-Charts在圓圈下方繪製值

values above the circles

1 - 但我需要的值/標籤下拉到下面的圈子,當存在對(因爲線)

2-標籤沒有足夠的空間,我需要提供額外的圓圈和標籤/值之間的偏移量。

3-我只需要在第一個和最後一個值上顯示圓。

我正在使用valueFormatter用於數據集委託。我可以

-(NSString *)stringForValue:(double)value entry:(ChartDataEntry *)entry 
dataSetIndex:(NSInteger)dataSetIndex viewPortHandler: 
(ChartViewPortHandler *)viewPortHandler{ 
if (entry.x==0||entry.x==myArray.count-1) { 
    NSInteger index = [NSNumber numberWithDouble:value].integerValue; 
    return [NSString stringWithFormat:@"%ld",(long)index]; 
} else { 
    return @""; 
} 

達到,但我不知道該怎麼辦。

在此先感謝。

+0

你能張貼標籤的代碼? –

+0

好的,更新了代碼@JohnnyRockex – David

+0

我們可以看到自己繪製標籤的代碼嗎? –

回答

1

可能是你可以使用linechart爲你的3.question。如果你從GitHub下載ChartDemo的應用程序,找到LineChart1ViewController.m和變化 - (空)setDataCount:(INT)計數範圍:(雙)範圍的方法,內容與此

- (void)setDataCount:(int)count range:(double)range { 
NSMutableArray *values = [[NSMutableArray alloc] init]; 

for (int i = 0; i < count; i++) 
{ 
    double val = arc4random_uniform(range) + 3; 
    if(i == 0 || i == count - 1) 
     [values addObject:[[ChartDataEntry alloc] initWithX:i y:val icon: [UIImage imageNamed:@"icon"]]]; 
    else 
     [values addObject:[[ChartDataEntry alloc] initWithX:i y:val icon: [UIImage imageNamed:@""]]]; 
} 

LineChartDataSet *set1 = nil; 
if (_chartView.data.dataSetCount > 0) 
{ 
    set1 = (LineChartDataSet *)_chartView.data.dataSets[0]; 
    set1.values = values; 
    [_chartView.data notifyDataChanged]; 
    [_chartView notifyDataSetChanged]; 
} 
else 
{ 
    set1 = [[LineChartDataSet alloc] initWithValues:values label:@"DataSet 1"]; 

    set1.drawIconsEnabled = YES; 

    set1.lineDashLengths = @[@5.f, @2.5f]; 
    set1.highlightLineDashLengths = @[@5.f, @2.5f]; 
    [set1 setColor:UIColor.blackColor]; 
    [set1 setCircleColor:UIColor.blackColor]; 
    set1.lineWidth = 1.0; 
    set1.circleRadius = 0.0; 
    set1.drawCircleHoleEnabled = NO; 
    set1.valueFont = [UIFont systemFontOfSize:9.f]; 
    set1.formLineDashLengths = @[@5.f, @2.5f]; 
    set1.formLineWidth = 1.0; 
    set1.formSize = 15.0; 

    NSArray *gradientColors = @[ 
           (id)[ChartColorTemplates colorFromString:@"#00ff0000"].CGColor, 
           (id)[ChartColorTemplates colorFromString:@"#ffff0000"].CGColor 
           ]; 
    CGGradientRef gradient = CGGradientCreateWithColors(nil, (CFArrayRef)gradientColors, nil); 

    set1.fillAlpha = 1.f; 
    set1.fill = [ChartFill fillWithLinearGradient:gradient angle:90.f]; 
    set1.drawFilledEnabled = YES; 

    CGGradientRelease(gradient); 

    NSMutableArray *dataSets = [[NSMutableArray alloc] init]; 
    [dataSets addObject:set1]; 

    LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets]; 

    _chartView.data = data;}} 

我的意思是,你可以使用(自定義的樣子圓圈等)圖標設置0.0f圈半徑後的第一個和最後一個圓圈。它看起來像這樣

enter image description here

玩得開心:)

+0

它的工作!謝謝你:)你知道如何將attributesString設置爲數據值文本嗎? – David

+0

聽起來不錯:)關於belongsString,我很抱歉,LineChartDataSet上存在valueFont,valueTextColor,valueFormatter屬性,並且它們都不是用於attributedString。但您可以更改字體系列,大小,顏色或格式。 –

0

1和2 - Change position of labels to be inside data set circles您可以對項目的解決方案進行基本更改。

3-我很抱歉,它對於折線圖上的所有值都是通用的。但是你可以使用組合圖來解決這個問題。對於第一個和最後一個值使用泡泡 - 對於不同的值,使用折線圖即可。

Goodluck :)

+0

他們似乎很好,我試着謝謝你:) – David