使用核心图根据圆半径将散点图缩放到 Y 轴
Scale scatter plot to Y-axis based on Circle radius using core plot
我有一个散点图,我在其中绘制了圆圈。它画得很好,我根据用户设备的宽高比对其进行缩放。圆圈的大小变化很大,所以我想相应地缩放绘图空间。问题是当我使用
[graph.defaultPlotSpace scaleToFitPlots:graph.allPlots];
缩放是相对于 y 轴完成的。我得到完美的圆圈,因为我使用纵横比,但由于这是纵向方向,并且缩放是相对于 y 轴完成的,因此圆圈在 x 轴上被切断。由于 x 轴的纵横比较短,因此我想相对于它进行缩放。这可能吗?
我想要实现的是 "zoom out" 或 "scale" 我的 plotSpace 这样我所有的圆圈都适合 plotSpace,如果不打破宽高比我似乎无法弄清楚从而得到伸展的圆圈。
看起来像这样:
我希望它看起来像这样:
编辑:
我目前用来缩放的代码:
[self.mGraph layoutIfNeeded];
[self.mGraph.defaultPlotSpace scaleToFitPlots:self.mGraph.allPlots];
float width = self.mGraph.plotAreaFrame.bounds.size.width;
float height = self.mGraph.plotAreaFrame.bounds.size.height;
float aspectRatio = width / height;
CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy];
[xRange expandRangeByFactor:CPTDecimalFromCGFloat(1.0f * aspectRatio)];
plotSpace.xRange = xRange;
CPTMutablePlotRange *yRange = [plotSpace.yRange mutableCopy];
[yRange expandRangeByFactor:CPTDecimalFromCGFloat(1.0f)];
plotSpace.yRange = yRange;
您可以从 plotArea
图层的 size
计算绘图区域的纵横比。首先在图表上调用 -layoutIfNeeded
以确保大小是最新的。使用计算出的纵横比来调整由 -scaleToFitPlots:
.
计算出的绘图范围
缩放后,得到绘图区域的大小和绘图范围的长度:
CGSize paSize = self.mGraph.plotAreaFrame.plotArea.bounds.size;
double xLen = plotSpace.xRange.lengthDouble;
double yLen = plotSpace.yRange.lengthDouble;
您希望比率 xLen / yLen
最终与 paSize.width / paSize.height
相同。将 xRange
或 yRange
扩大一个大于一 (1) 的因子以使比率相等。
我有一个散点图,我在其中绘制了圆圈。它画得很好,我根据用户设备的宽高比对其进行缩放。圆圈的大小变化很大,所以我想相应地缩放绘图空间。问题是当我使用
[graph.defaultPlotSpace scaleToFitPlots:graph.allPlots];
缩放是相对于 y 轴完成的。我得到完美的圆圈,因为我使用纵横比,但由于这是纵向方向,并且缩放是相对于 y 轴完成的,因此圆圈在 x 轴上被切断。由于 x 轴的纵横比较短,因此我想相对于它进行缩放。这可能吗?
我想要实现的是 "zoom out" 或 "scale" 我的 plotSpace 这样我所有的圆圈都适合 plotSpace,如果不打破宽高比我似乎无法弄清楚从而得到伸展的圆圈。
看起来像这样:
我希望它看起来像这样:
编辑:
我目前用来缩放的代码:
[self.mGraph layoutIfNeeded];
[self.mGraph.defaultPlotSpace scaleToFitPlots:self.mGraph.allPlots];
float width = self.mGraph.plotAreaFrame.bounds.size.width;
float height = self.mGraph.plotAreaFrame.bounds.size.height;
float aspectRatio = width / height;
CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy];
[xRange expandRangeByFactor:CPTDecimalFromCGFloat(1.0f * aspectRatio)];
plotSpace.xRange = xRange;
CPTMutablePlotRange *yRange = [plotSpace.yRange mutableCopy];
[yRange expandRangeByFactor:CPTDecimalFromCGFloat(1.0f)];
plotSpace.yRange = yRange;
您可以从 plotArea
图层的 size
计算绘图区域的纵横比。首先在图表上调用 -layoutIfNeeded
以确保大小是最新的。使用计算出的纵横比来调整由 -scaleToFitPlots:
.
缩放后,得到绘图区域的大小和绘图范围的长度:
CGSize paSize = self.mGraph.plotAreaFrame.plotArea.bounds.size;
double xLen = plotSpace.xRange.lengthDouble;
double yLen = plotSpace.yRange.lengthDouble;
您希望比率 xLen / yLen
最终与 paSize.width / paSize.height
相同。将 xRange
或 yRange
扩大一个大于一 (1) 的因子以使比率相等。