如何确定/计算在CorePlot中绘制Y轴刻度线的位置?

时间:2014-01-30 19:32:42

标签: ios core-plot

我正在使用CorePlot生成带有水平条形的条形图(CPTXYGraph和CPTBarPlot)。

在任何给定时间只绘制了10个条形图,但它们的标签任意长。因此,Y轴标签旋转设置为0.5。对于最长的标签,标签位于绘图区域的左侧和/或底部之外会出现剪裁问题。

我已经通过确定最长标签的宽度(以适当的字体呈现)并在适当的方式旋转以在plotAreaFrame中设置左边距来修复此方向。

由于标签的旋转,如果图形底部的图形具有长名称,它仍然可以从图形的底部边缘延伸并在那里被剪切。

我知道旋转标签的垂直高度,但是我被卡住的地方是试图确定绘图轴标签的绘图区域,以便我可以确定需要多少底部填充。

我不确定我是否应该尝试确定X轴标签部分的高度,然后细分剩余高度以确定滴答应该落在哪里,或者是否还有其他更好的方法。< / p>

2 个答案:

答案 0 :(得分:0)

标签偏离labelOffset最近刻度标记的末尾。刻度线结尾的位置取决于tickDirectiontickLabelDirectionmajorTickLength

答案 1 :(得分:0)

有一些方法可以让您将点从绘图空间坐标系转换为视图坐标系。我最终用以下代码解决了问题:

// Tell the graph to lay itself out if it needs to. 
[self.graph layoutIfNeeded];

// Create a point that represents 0,1 as plotted on the graph.
NSDecimal plotPoint[2];
plotPoint[CPTCoordinateX] = CPTDecimalFromInt (0);
plotPoint[CPTCoordinateY] = CPTDecimalFromInt (1);

// Convert that point from the plot coordinate system to the view coordinate system
CGPoint point = [self.graph.defaultPlotSpace plotAreaViewPointForPlotPoint: plotPoint];

// If the difference between the height of the rotated label and the position that it 
// will be plotted at is at least the bottom padding, then the height is too large,
// so fix the padding.
if (labelHeight - point.y >= self.graph.plotAreaFrame.paddingBottom)
    [self.graph.plotAreaFrame setPaddingBottom: (labelHeight - point.y)];

我的图表已将默认底部填充设置为最小值,如果已经不够,则允许此代码将其填充。