2016-10-26 9 views
1

私はダニエルチャートライブラリを使用しています。単純なバーグラフのxAxis値を新しいライブラリで変更したためにxValuesを設定できないため、xValuesを文字列として設定する前のコードが表示されますが、コードは同じに設定できません。Daniel Chartを使用して、X値を棒グラフビューのX軸に設定する方法は?

enter image description here 旧コード:はxValuesとbarchartdataを設定すなわち最後の行を確認してください。

- (void)setDataCount:(int)count range:(float)range 
{ 

    NSArray *tempXvals = [self.graphDict valueForKey:@"xVals"]; 
    NSArray *xvals = [[tempXvals reverseObjectEnumerator]allObjects]; 

    NSMutableArray *xVals; 

    if ([xvals count]>0) { 
     xVals = [[NSMutableArray alloc] initWithArray:xvals]; 
    } 
    else 
    { 
     xVals = [[NSMutableArray alloc] init]; 
    } 

    NSArray *tempYvals = [self.graphDict valueForKey:@"yVals"]; 
    NSArray *yvals = [[tempYvals reverseObjectEnumerator]allObjects]; 
    NSMutableArray *yVals = [[NSMutableArray alloc] init]; 

    int xValsCount = [xVals count]; 
    for (int i = 0; i < xValsCount; i++) 
    { 
     int val = [[yvals objectAtIndex:i]integerValue]; 
     [yVals addObject:[[BarChartDataEntry alloc]initWithValue:(val) xIndex:i]]; 
    } 


    NSString *graphTitle = [self.graphDict valueForKey:@"title"]; 
    BarChartDataSet *set1; 
    if (graphTitle != nil) { 
     set1 = [[BarChartDataSet alloc] initWithYVals:yVals label:graphTitle]; 
    } 
    graphTitle = nil; 


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

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init]; 
    formatter.minimumFractionDigits = 0; 

    BarChartData *data = [[BarChartData alloc] initWithXVals:xVals dataSets:dataSets]; 

新しいコード:新しいライブラリでだけxvaluesを渡す方法use.butデータセット。

- (void)setDataCount:(int)count range:(double)range 
{ 
    double start = 1.0; 

    NSMutableArray *yVals = [[NSMutableArray alloc] init]; 

    for (int i = start; i < start + count + 1; i++) 
    { 
     double mult = (range + 1); 
     double val = (double) (arc4random_uniform(mult)); 
     [yVals addObject:[[BarChartDataEntry alloc] initWithX:(double)i y:val]]; 
    } 

    BarChartDataSet *set1 = nil; 
    if (_chartView.data.dataSetCount > 0) 
    { 
     set1 = (BarChartDataSet *)_chartView.data.dataSets[0]; 
     set1.values = yVals; 
     [_chartView.data notifyDataChanged]; 
     [_chartView notifyDataSetChanged]; 
    } 
    else 
    { 
     set1 = [[BarChartDataSet alloc] initWithValues:yVals label:@"The year 2017"]; 
     [set1 setColors:ChartColorTemplates.material]; 

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

     BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets]; 
     [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]]; 

     data.barWidth = 0.9f; 

     _chartView.data = data; 
    } 
} 

答えて

3

この問題はまた、メソッドがコールされますように、次のようにx軸するデリゲートを設定し、そのすなわちIChartAxisValueFormatterのためのデリゲートをresolve.set - :だから、今ではこのようなものでなければなりません。

xAxis.valueFormatter = self; 

私は以下のコードを使用して値フォーマッタを変更します。

- (NSString *)stringForValue:(double)value 
         axis:(ChartAxisBase *)axis 
{ 
    return months[(int)value % months.count]; 
} 
1

あなたの下の行は、今すぐインデックスを渡すべきではありません。

[yVals addObject:[[BarChartDataEntry alloc] initWithX:(double)i y:val]]; 

代わりにxAxisの値はxValsである必要があります。

[yVals addObject:[[BarChartDataEntry alloc] initWithX:[[xVals objectAtIndex:i]integerValue] y:val]]; 
+0

私は同じことを言いますが、結果が異なります。更新に関する質問をご覧ください。そこにリンクがあります。 – ashmi123

関連する問題