0

我的 Core Plot 项目中有第二个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];

在此处输入图像描述

编辑

根据下面 Eric 的回答,我添加了以下代码片段来计算 y2 轴的范围,该范围应将其零点与 y 轴的零点对齐:

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 < 0y2位置也被拖动到零点以下,这导致计算y2AxisAbsoluteLength值不再足以补偿y2位置拖动到零点以下的问题(y2具有高值的点是截断或未在图表中绘制)。y2我的解决方案是简单地将位置的绝对值添加到y2AxisAbsoluteLength值中,但这会扭曲两个零点(yy2)的对齐方式。

我需要如何更改我的计算以正确解释正值和负值y?在这种情况下,我不能使用expandRangeByFactor,因为在编码时乘法因子是未知的。

在此处输入图像描述

4

1 回答 1

1

两个轴都拉伸绘图区域的整个高度,因此您可以计算一些比率来确定第二个轴的范围。

例子:

绘图范围 1:位置 -100,长度 400

这意味着零点位于距离范围位置长度的 25% (100/400) 处。如果第二个绘图范围的长度为 20,您将给它一个位置 -5,将 25% 的长度放在零点以下。

于 2013-01-24T02:49:06.197 回答