【问题标题】:Plot area padding to prevent symbols from being truncated. (Core Plot)绘制区域填充以防止符号被截断。 (核心情节)
【发布时间】:2014-02-25 23:19:52
【问题描述】:

在 iOS 的 Core Plot 中,有没有办法向绘图区域添加某种填充,而不是绘图区域框架?使用绘图符号时,如果符号落在框架的轴线或边界上,则可以截断它们。诚然,我理解为什么在将非零大小的圆圈绘制为数据符号时会出现这种情况,但我很好奇是否有办法添加一些填充来防止这种情况。

或者也许有一种方法可以处理轴范围,但如果是这样,除了创建“神奇地”足够大以考虑这些符号大小的轴范围之外,我还没有想出神奇的组合。

在随附的屏幕截图中,x 轴代表一周。第一天的任何数据点都将被截断,因为它被绘制在 y 轴上。理想情况下,我希望将这个数据点画在“有点内部”。 (这实际上意味着我希望 x 轴范围增加足以考虑到这一点。)

对于 y 轴也是如此。值“0”绘制在 x 轴上。

我真的不希望轴显示比要求更宽的范围(例如,我不希望 y 轴变为 -1。)

谢谢。

【问题讨论】:

    标签: ios objective-c core-plot


    【解决方案1】:

    以下是 Plot Gallery 示例应用中“控制图”演示的一些示例代码:

    // Adjust visible ranges so plot symbols along the edges are not clipped
    CPTMutablePlotRange *xRange = [[plotSpace.xRange mutableCopy] autorelease];
    CPTMutablePlotRange *yRange = [[plotSpace.yRange mutableCopy] autorelease];
    
    x.orthogonalCoordinateDecimal = yRange.location;
    y.orthogonalCoordinateDecimal = xRange.location;
    
    x.visibleRange = xRange;
    y.visibleRange = yRange;
    
    x.gridLinesRange = yRange;
    y.gridLinesRange = xRange;
    
    [xRange expandRangeByFactor:CPTDecimalFromDouble(1.05)];
    [yRange expandRangeByFactor:CPTDecimalFromDouble(1.05)];
    plotSpace.xRange = xRange;
    plotSpace.yRange = yRange;
    

    您可以根据图形和绘图符号的大小,根据需要调整扩展系数。

    【讨论】:

    • 谢谢埃里克,这绝对有效。你能解释一下它为什么起作用吗?如何扩大范围而数据点仍然正确而我没有任何改变?就此而言,我的自定义标签如何或多或少起作用,但是如果我增加扩展因子,那么标签就会开始变得真正聚集起来。
    • visibleRange 限制了实际绘制的轴部分,gridLinesRange 对网格线的作用相同。我们扩大绘图范围,使绘图区域(包含所有绘图的层)足够大,以包含悬挂在轴外的符号。
    • @EricSkroch #Scatter 我创建了 Y 轴(0,50,100,150,200,250,300)的自定义标签,并且相应的数据点值为 18.63、29.32、24.31、33.68、136.23、128.44、126.20,并将 X 轴创建为(Mon, ....SUN) 并考虑各自的数据点 (0,1,2...6)。我们正在绘制总共 7 个点。但是我手动给出了小于 50 的距离(majorIntervalLength),以便在不滚动图表的情况下显示所有 y 标签。我面临着各自的 y 数据值点并没有相对于 y 标签位置说谎。 dl.dropboxusercontent.com/u/186007808/ScreenShotDescription.png
    • @HimanshuAgnihotri 提出一个新问题,而不是评论一个已有一年多的问题。我们需要您在评论中提供的代码之外的更多详细信息。
    • @EricSkroch:我认为可以通过评论解决。我在这里再次向您解释:基本上我已经为 X、Y 轴创建了自定义标签,如果我通过 majorIntervalLength (=50) 而不是自定义创建 Y 轴标签 (0,50,100.....300)。这将占用巨大的空间,并且所有标签值都不会显示在屏幕上。因此,我通过指定它们的刻度位置值将它们创建为自定义。但是尊重 y 数据值是通过考虑 50(majorIntervalLength)来绘制图。如图所示,其原始 X、Y 点图。您可以根据 Y 标签值匹配 Y 位置。
    【解决方案2】:

    只有这对我来说解决了,价值从两边正确对齐(领先和试验)

    [xRange expandRangeByFactor:[NSNumber numberWithDouble:1.2]];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-18
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多