2016-04-05 7 views
4

enter image description hereIOS-チャートレーダーチャートターン自動これら二つのレーダーチャートは、オレンジ色のビットに対して同一のデータ点を有するOFF

enter image description here

スケーリングが、灰色に異なります。しかし、あなたが見ることができるように、それは自動拡大されており、オレンジのビットは同じ正確なデータポイントであっても、第2のチャート上で大きくなります。オートスケール機能をオフにする方法はありますか?私は100%もチャートの端に右に行くことを望みます。

-(void)setupRadarChart 
{ 
    self.radarChart.descriptionText = @""; 
    self.radarChart.webLineWidth = .75; 
    self.radarChart.innerWebLineWidth = 0.375; 
    self.radarChart.webAlpha = 1.0; 
    self.radarChart.userInteractionEnabled = NO; 
    self.radarChart.xAxis.enabled = YES; 
    ChartYAxis *yAxis = self.radarChart.yAxis; 
    yAxis.enabled = NO; 
    ChartLegend *l = self.radarChart.legend; 
    l.position = ChartLegendPositionBelowChartLeft; 
    l.font = [UIFont systemFontOfSize:UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 12 : (headerWidth/40)]; 
    [self setRadarData]; 
} 

- (void)setRadarData 
{ 
    NSMutableArray *parties = [[NSMutableArray alloc] init]; 
    for (PillarModel *m in [DataManager sharedData].pillars) 
    { 
     [parties addObject:m.abbreviation]; 
    } 
    NSMutableArray *yVals2 = [[NSMutableArray alloc] init]; 
    NSMutableArray *benchMark = [[NSMutableArray alloc] init]; 
    BOOL shouldAdd = YES; 

    for (PillarModel *pillar in [DataManager sharedData].pillars) 
    { int totalPillarScore = (int)[[DataManager sharedData] getTotalScorePossible:[[DataManager sharedData] getIndividualQuestionResultsForPillar:pillar.pillarId]]; 
     if ((isCompany ? [[DataManager sharedData] getCompanyScoresForCategory:pillar] : [[DataManager sharedData] getIndividualScoreForCategory:pillar.pillarId]) != 0) 
     { 
      shouldAdd = NO; 
     } 
     if (pillar.pillarId == numberOfPillars -1 && shouldAdd) { 
      [yVals2 addObject:[[ChartDataEntry alloc] initWithValue:0.01 xIndex:pillar.pillarId]]; 

     } 
     else{ 
      double val = (isCompany ? (double)[[DataManager sharedData] getCompanyScoresForCategory:pillar]/totalPillarScore                    : (double)[[DataManager sharedData] getIndividualScoreForCategory:pillar.pillarId]/totalPillarScore); 
      [yVals2 addObject:[[ChartDataEntry alloc] initWithValue:val xIndex:pillar.pillarId]]; 
     } 
     float pillarBenchMark = [[[[[DataManager sharedData].benchmarkJSONDict objectForKey:hightlightedView.lowercaseString] objectForKey:pillar.title] objectForKey:@"pillar"] intValue]; 
     float ifNoBenchMarkThanCompanyScore = (pillarBenchMark ? pillarBenchMark : (isCompany ? [[DataManager sharedData] getIndividualScoreForCategory:pillar.pillarId]: [[DataManager sharedData] getCompanyScoresForCategory:pillar])); 
     [benchMark addObject:[[ChartDataEntry alloc] initWithValue:ifNoBenchMarkThanCompanyScore/totalPillarScore xIndex:pillar.pillarId]]; 
    } 

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

    for (int i = 0; i < numberOfPillars; i++) 
    { 
     [xVals addObject:parties[i % parties.count]]; 
    } 

    NSString *label = (isCompany ? @"Company score" : @"Your score"); 
    RadarChartDataSet *set2 = [[RadarChartDataSet alloc] initWithYVals:yVals2 label:label]; 
    [set2 setColor:[DataManager sharedData].mainColor]; 
    set2.drawFilledEnabled = YES; 
    set2.fillAlpha = 1.0f; 
    set2.lineWidth = 2.0; 

    RadarChartDataSet *benchMarkSet = [[RadarChartDataSet alloc] initWithYVals:benchMark label:@"Benchmark"]; 
    [benchMarkSet setColor:[UIColor colorWithRed:125/255.0f green:125/255.0f blue:125/255.0f alpha:0.6f]]; 
    benchMarkSet.drawFilledEnabled = YES; 
    benchMarkSet.fillAlpha = 0.0f; 
    benchMarkSet.lineWidth = 2.0; 
    benchMarkSet.highlightLineDashLengths = @[[NSNumber numberWithInt:2]]; 
    benchMarkSet.highlightLineDashPhase = 2; 

    RadarChartData *data = [[RadarChartData alloc] initWithXVals:xVals dataSets:@[set2, benchMarkSet]]; 
    [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:8.f]]; 
    [data setDrawValues:NO]; 

    self.radarChart.data = data; 
} 

答えて

0

孙博弘が投稿した答えは正しくありませんでしたが、それが解決するのがどれくらい簡単かを知ることができました。これは、オートスケーリングの問題を解決し、現在ではエッジにも達しています。

self.radarChart.yAxis.customAxisMin = 0; 
self.radarChart.yAxis.customAxisMax = 1; 
0

内部アクセスレベルを使用するため、customAxisMaxを直接使用することはありません。 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html

/// Flag indicating that the axis-max value has been customized 
internal var _customAxisMax: Bool = false 

代わりに、あなたはそれを制御するためにaxisMaxValueを使用することができます。

/// The maximum value for this axis. 
/// If set, this value will not be calculated automatically depending on the provided data. 
/// Use `resetCustomAxisMin()` to undo this. 
public var axisMaxValue: Double 
{ 
    get 
    { 
     return _axisMaximum 
    } 
    set 
    { 
     _customAxisMax = true 
     _axisMaximum = newValue 
    } 
} 

// 2016年6月12日更新

public var factor: CGFloat 
{ 
    let content = _viewPortHandler.contentRect 
    return min(content.width/2.0, content.height/2.0) 
      /CGFloat(_yAxis.axisRange) 
} 

RadarChartViewはピクセルに値を変換するためにfactorを計算します。

おそらく、axisMinValueaxisMaxValueを使用して自動スケールを制御することができます。

+0

これは私にとっては機能しません。ピクセル値は物事をピクセル化します。 –

関連する問題