我的Core Plot项目中有第二个y
- 轴(y2
),我已按照以下代码中的说明进行设置。
如何让两个y
轴具有相同的零点?目前,每个轴的零点处于不同的高度(在下面的屏幕截图中,y
- 轴'零点等于y2
- 值为8.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
- 值为> 0
,这似乎工作正常。但是,对于y
- 值< 0
,y2
位置也会拖到零点以下,这会导致计算出的y2AxisAbsoluteLength
值不再足够的问题补偿拖动y2
位置低于零点(y2
点,高值被切断或未绘制在图表中)。我的解决方案只是将y2
位置的绝对值添加到y2AxisAbsoluteLength
值,但这会扭曲两个零点(y
和y2
的对齐方式)。
如何更正我的计算以正确计算正面和负面y
- 值?
在这种情况下,我无法使用expandRangeByFactor
,因为在编码时乘法因子是未知的。
答案 0 :(得分:1)
两个轴都会拉伸绘图区域的整个高度,因此您可以计算一些比率以确定第二个轴的范围。
示例:强>
绘图范围1:位置-100,长度400
这意味着零点位于距离范围位置25%(100/400)的点上。如果第二个绘图范围的长度为20,则会给它一个-5的位置,将长度的25%放在零点以下。