0

iOS と Core Plot で y 軸ラベルを適切に表示する際に問題が発生しました...

私が現在持っている 2 つの異なるシナリオを紹介します。そのうちの 1 つを適切に機能させるために誰かが助けてくれることを願っています...

さて、最初のシナリオ: コード:

// Configure y-axis
CPTAxis *y = axisSet.yAxis;
y.axisLineStyle = axisLineStyle;
y.majorGridLineStyle = customGridStyle;
y.labelingPolicy = CPTAxisLabelingPolicyAutomatic;
y.labelTextStyle = axisTextStyle;
y.majorTickLineStyle = axisLineStyle;
y.majorTickLength = 0.0f;
y.minorTickLength = 0.0f;
y.tickDirection = CPTSignNegative;
NSInteger majorIncrement = [self findStep:(maxValue - minValue)/7];
CGFloat yMax = [self findMaximumValue:maxValue];
NSMutableSet *yLabels = [NSMutableSet set];
NSMutableSet *yMajorLocations = [NSMutableSet set];

int maxLocation = 0;

for (NSInteger j = 0; j <= yMax + majorIncrement; j += majorIncrement) {
    CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:[NSString stringWithFormat:@"%i", j] textStyle:y.labelTextStyle];
    NSDecimal location = CPTDecimalFromInteger(j);
    label.tickLocation = location;
    label.offset = 125;

    if (label) {
        [yLabels addObject:label];
    }

    [yMajorLocations addObject:[NSDecimalNumber decimalNumberWithDecimal:location]];
    if (maxLocation < [[NSDecimalNumber decimalNumberWithDecimal:location] intValue]) {
        maxLocation = [[NSDecimalNumber decimalNumberWithDecimal:location] intValue];
    }
}

y.gridLinesRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInteger(0) length:CPTDecimalFromInteger(maxLocation)];
y.axisLabels = yLabels;
y.majorTickLocations = yMajorLocations;

これで、このコードはある程度機能します...以下のスクリーンショットを参照してください。 コアプロット コア プロット 2

ここで変更したい部分は小数点です...位置の小数点を変更して.0を表示したい...

  1. シナリオ (私が本当に修正したかったもの) 以下のコードを読む手間を省くために、ここでの大きな変更点は

    y.labelingPolicy = CPTAxisLabelingPolicyNone;

コード:

// Configure y-axis
CPTAxis *y = axisSet.yAxis;
y.axisLineStyle = axisLineStyle;
y.majorGridLineStyle = customGridStyle;
y.labelingPolicy = CPTAxisLabelingPolicyNone;
y.labelTextStyle = axisTextStyle;
y.majorTickLineStyle = axisLineStyle;
y.majorTickLength = 0.0f;
y.minorTickLength = 0.0f;
y.tickDirection = CPTSignPositive;
NSInteger majorIncrement = [self findStep:(maxValue - minValue)/7];
CGFloat yMax = [self findMaximumValue:maxValue];
NSMutableSet *yLabels = [NSMutableSet set];
NSMutableSet *yMajorLocations = [NSMutableSet set];

int maxLocation = 0;

for (NSInteger j = 0; j <= yMax + majorIncrement; j += majorIncrement) {
    CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:[NSString stringWithFormat:@"%i", j] textStyle:y.labelTextStyle];
    NSDecimal location = CPTDecimalFromInteger(j);
    label.tickLocation = location;
    label.offset = -25;

    if (label) {
        [yLabels addObject:label];
    }

    [yMajorLocations addObject:[NSDecimalNumber decimalNumberWithDecimal:location]];
    if (maxLocation < [[NSDecimalNumber decimalNumberWithDecimal:location] intValue]) {
        maxLocation = [[NSDecimalNumber decimalNumberWithDecimal:location] intValue];
    }
}

y.gridLinesRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInteger(0) length:CPTDecimalFromInteger(maxLocation)];
y.axisLabels = yLabels;
y.majorTickLocations = yMajorLocations;
x.gridLinesRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInteger(0) length:CPTDecimalFromInteger(maxLocation)];

プロットは次のようになります。

コア プロット 3コア プロット 4コア プロット 5

ここでは、多くの y 軸が欠落しています...

どんな助けでも大歓迎です!

4

1 に答える 1

2

ラベル付けポリシーを使用CPTAxisLabelingPolicyNoneすると、目盛りの位置とラベルを完全に制御できます。作成するティックとラベルの数とそれらをどこに配置するかは、あなた次第です。

軸の数値形式を変更するだけの場合は、CPTAxisLabelingPolicyAutomaticラベリング ポリシー (または 以外のいずれかCPTAxisLabelingPolicyNone) を維持し、目盛りの位置とラベルを作成するコードを削除し、labelFormatter. 任意のを使用できますNSFormatter。を作成しNSNumberFormatter、目的の数値形式を表示するように構成して、labelFormatterプロパティに設定します。

于 2013-06-19T01:43:22.703 に答える