我在散点图中使用了两个y轴(y和y2),我想为每个轴定位相同高度的标题。
请参阅下面的示例图表,其中我有两个标题(y:“USD”和y2:“ev / ebit”)。不幸的是,我没有找到一种方法来将两个标题绘制在完全相同的高度(y值)。
这就是我目前计算标题的y位置的方法:
double yTitleLocation = plotSpace.yRange.lengthDouble + plotSpace.yRange.locationDouble;
yAxis.titleLocation = CPTDecimalFromDouble(yTitleLocation);
yAxis.title = self.issue.company.contrCurrency;
yAxis.titleRotation = 2 * M_PI;
yAxis.titleOffset = -15;
double y2TitleLocation = valuationPlotSpace.yRange.lengthDouble + valuationPlotSpace.yRange.locationDouble;
y2Axis.titleLocation = CPTDecimalFromDouble(y2TitleLocation);
y2Axis.title = self.valuation.id;
y2Axis.titleRotation = 2 * M_PI;
我如何更改代码以在两个y轴的y值相同的位置绘制标题?
您建议左对齐y轴的标题和y2轴的右对齐。我目前正在使用titleOffset作为y轴,但相信可能有更好的方法来做到这一点。
谢谢!
Core-Plot框架中的错误修复后的图表: (请参阅下面的答案1)
我已添加此代码段以显示我如何设置图表和两个散点图(股票价格和估值):
graph = [[CPTXYGraph alloc] initWithFrame:CGRectZero];
self.hostView.hostedGraph = graph;
[graph applyTheme:[CPTTheme themeNamed:kCPTPlainWhiteTheme]];
graph.frame = self.view.bounds;
graph.plotAreaFrame.masksToBorder = NO;
graph.plotAreaFrame.cornerRadius = 0.0f;
CPTScatterPlot *sharePricePlot = [[CPTScatterPlot alloc] initWithFrame:graph.bounds];
sharePricePlot.identifier = @"CloseSharePricePlot";
sharePricePlot.dataLineStyle = sharePricePlotLineStyle;
sharePricePlot.dataSource = self;
CPTScatterPlot *valuationPlot = [[CPTScatterPlot alloc]initWithFrame:graph.bounds];
valuationPlot.dataSource = self;
CPTXYPlotSpace *valuationPlotSpace = [[CPTXYPlotSpace alloc] init];
valuationPlotSpace.identifier = ValuationPlotSpaceIdentifier;
[graph addPlotSpace:valuationPlotSpace];
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
[plotSpace scaleToFitPlots:[NSArray arrayWithObject:sharePricePlot]];
[valuationPlotSpace scaleToFitPlots:[NSArray arrayWithObject:valuationPlot]];
答案 0 :(得分:4)
这是一个Core Plot错误,已修复here。您现在可以在Core Plot副本中进行更改。只要发生这种情况,它将成为下一个版本的一部分。我会写这样的标题代码:
yAxis.titleLocation = plotSpace.yRange.maxLimit;
yAxis.title = self.issue.company.contrCurrency;
yAxis.titleRotation = 0.0;
yAxis.titleOffset = -15;
y2Axis.titleLocation = valuationPlotSpace.yRange.maxLimit;
y2Axis.title = self.valuation.id;
y2Axis.titleRotation = 0.0;
y2Axis.titleOffset = -15;
您可以使用绘图空间计算确切的标题位置。例如,要将标题放置在绘图区域上方15个像素处,请尝试以下操作:
CGRect plotAreaBounds = graph.plotAreaFrame.plotArea.bounds;
CGPoint viewPoint = CGPointMake(CGRectMinX(plotAreaBounds),
CGRectMaxY(plotAreaBounds) + 15.0);
NSDecimal plotPoint[2];
[plotSpace plotPoint:plotPoint forPlotAreaViewPoint:viewPoint];
yAxis.titleLocation = plotPoint[CPTCoordinateY];