首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心图:将两个y轴对齐,使其具有相同的零点

问核心图:将两个y轴对齐,使其具有相同的零点
EN

Stack Overflow用户
提问于 2013-01-23 22:31:03
回答 1查看 493关注 0票数 0

在我的Core Plot项目中,我有第二个y-axis (y2),我已经按照下面的代码进行了设置。

如何使两个y-axes具有相同的零点?目前,每个轴的零点位于不同的高度(在下面的屏幕截图中,y-axis的零点等于8.8%的y2-value )。如何让Core Plot在两个轴的相同高度绘制零点?

我的代码:

代码语言:javascript
复制
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轴的零点对齐:

代码语言:javascript
复制
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值不再足以补偿将y2位置拖动到零点以下(具有较高值的y2点被截断或不在图表中绘制)的问题。我的解决方案是简单地将y2位置的绝对值与y2AxisAbsoluteLength值相加,但这会扭曲两个零点(y和y2)的对齐。

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

​

​

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-24 10:49:06

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

示例:

打印范围1:位置-100,长度400

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14482111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档