0

以下のコードで説明されているように、コア プロット プロジェクトに2 番目のy軸 ( ) を設定しました。y2

y両方の軸に同じゼロ点を持たせるにはどうすればよいですか? 現在、各軸のゼロ点は異なる高さにあります (以下のスクリーン ショットでは、y軸のゼロ点はy28.8% の値に等しくなります)。Core Plot で両方の軸の同じ高さにゼロ点をプロットするにはどうすればよいですか?

私のコード:

CPTXYAxis *y = axisSet.yAxis;
y.coordinate = CPTCoordinateY;
y.orthogonalCoordinateDecimal = CPTDecimalFromDouble(xAxisStart);
y.axisLineStyle = axisLineStyle;
y.majorIntervalLength = CPTDecimalFromInt(1);
y.majorTickLength = 5;
y.minorTickLength = 0;
y.majorGridLineStyle = axisLineStyle;

CPTXYPlotSpace *relativePlotSpace = [[CPTXYPlotSpace alloc] init];
[graph addPlotSpace:relativePlotSpace];
       
CPTXYAxis *y2 = [[CPTXYAxis alloc] init];
y2.axisLineStyle                = axisLineStyle;
y2.coordinate                   = CPTCoordinateY;
y2.orthogonalCoordinateDecimal  = CPTDecimalFromDouble(xAxisLength);
y2.plotSpace                    = relativePlotSpace;
y2.separateLayers               = NO;
y2.majorTickLineStyle           = axisLineStyle;
y2.minorTicksPerInterval        = 1;
y2.preferredNumberOfMajorTicks  = 8;
y2.labelingPolicy               = CPTAxisLabelingPolicyEqualDivisions;
graph.axisSet.axes = [NSArray arrayWithObjects:x, y, y2, nil];

ここに画像の説明を入力

編集

以下のエリックの回答に基づいて、次のコード スニペットを追加して、ゼロ点を y 軸のゼロ点に揃える y2 軸の範囲を計算しました。

double yAxisAbsoluteLength = 
   ABS(plotSpace.yRange.lengthDouble);
double y2AxisAbsoluteLength = 
   (ABS(relativePlotSpace.yRange.lengthDouble) +
   ABS(relativePlotSpace.yRange.locationDouble));
double yAxisZeroPointToLengthRatio = 
   plotSpace.yRange.locationDouble / 
   yAxisAbsoluteLength;
double y2AxisLocation = yAxisZeroPointToLengthRatio
    *y2AxisAbsoluteLength;
relativePlotSpace.yRange = [CPTPlotRange
   plotRangeWithLocation:CPTDecimalFromDouble(y2AxisLocation)
   length:CPTDecimalFromDouble(y2AxisAbsoluteLength)];

y-values がの場合、これはうまくいくようです> 0。ただし、y-values< 0の場合、y2位置はゼロ点の下にもドラッグされるため、計算された値がゼロ点より下の位置y2AxisAbsoluteLengthのドラッグを補うのに十分でなくなるという問題が発生します (値が高い点はカットされているか、チャートにプロットされていません)。私の解決策は、単に位置の絶対値を値に加算することですが、これは 2 つのゼロ点 (と) の位置合わせを歪めます。y2y2y2y2AxisAbsoluteLengthyy2

正の値と負の値を正しく考慮するには、計算をどのように変更する必要がありyますか? expandRangeByFactorこの状況では、コーディング時の倍率がわからないので使えません。

ここに画像の説明を入力

4

1 に答える 1

1

どちらの軸もプロット エリアの高さ全体に広がるため、いくつかの比率を計算して 2 番目の軸の範囲を決定できます。

例:

プロット範囲 1: 位置 -100、長さ 400

これは、ゼロ点が範囲位置から長さの 25% (100/400) の点にあることを意味します。2 番目のプロット範囲の長さを 20 にする場合は、位置を -5 にして、長さの 25% をゼロ点より下に置きます。

于 2013-01-24T02:49:06.197 に答える