使用核心图根据圆半径将散点图缩放到 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 相同。将 xRangeyRange 扩大一个大于一 (1) 的因子以使比率相等。