【问题标题】:Why won't my x-axis show with core-plot on the iPhone?为什么我的 x 轴不会在 iPhone 上显示核心图?
【发布时间】:2010-01-13 05:51:32
【问题描述】:

编辑:我认为我的问题最好表述为:我怎样才能有一个不从零开始的 Y 轴?似乎 x 轴总是位于 y=0,但我希望 x 轴在 y 轴上处于某个正数。

这是一个包含更多常规数据的图表...我只是希望 x 轴位于该图的最小 y 值(大约 77),而不是 0。

这是我用来创建图表的函数。

这是一大堆代码,我不太确定哪一部分可能不显示 x 轴。

x 轴未显示是否与我的数据有关?

- (void) showGraph:(SavedDetailScreen*)dataSource {

  // create the graph and add it to the view
  CPXYGraph *graph = [[CPXYGraph alloc] initWithFrame: CGRectZero];
  graph.plotArea.masksToBorder = NO;
  CPLayerHostingView *graphView = [[CPLayerHostingView alloc] initWithFrame:CGRectMake(0,0, 280, 240)];
  [self addSubview:graphView];
  graphView.hostedLayer = graph;
  graph.paddingLeft = 50.0;
  graph.paddingTop = 20.0;
  graph.paddingRight = 10.0;
  graph.paddingBottom = 40.0;              

  // set up the ranges for the graph axis
  float minElevation = dataSource.track.tbStats.minAlt;
  float maxElevation = dataSource.track.tbStats.maxAlt-dataSource.track.tbStats.minAlt;
  float minDistance = 0.0f;
  float maxDistance = dataSource.track.tbStats.totalDistance;
  CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;
  plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(minDistance)
                                             length:CPDecimalFromFloat(maxDistance)];
  plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(minElevation)
                                                 length:CPDecimalFromFloat(maxElevation)];

  // style the graph with white text and lines
  CPTextStyle *whiteText = [CPTextStyle textStyle];
  whiteText.color = [CPColor whiteColor];              
  CPLineStyle *whiteStyle = [CPLineStyle lineStyle];
  whiteStyle.lineColor = [CPColor whiteColor];
  whiteStyle.lineWidth = 2.0f;

  // set up the axis
  CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet;      
  CPXYAxis *x = axisSet.xAxis;
  CPXYAxis *y = axisSet.yAxis;              
  x.majorIntervalLength = CPDecimalFromFloat(maxDistance/10.0f);
  x.minorTicksPerInterval = 0;
  x.majorTickLineStyle = whiteStyle;
  x.minorTickLineStyle = whiteStyle;
  x.axisLineStyle = whiteStyle;
  x.minorTickLength = 5.0f;
  x.majorTickLength = 10.0f;
  x.labelOffset = 3.0f;
  x.labelTextStyle = whiteText;
  y.majorIntervalLength = CPDecimalFromFloat(maxElevation/5.0f);
  y.minorTicksPerInterval = 0;
  y.majorTickLineStyle = whiteStyle;
  y.minorTickLineStyle = whiteStyle;
  y.axisLineStyle = whiteStyle;
  y.minorTickLength = 5.0f;
  y.majorTickLength = 10.0f;
  y.labelOffset = 3.0f;
  y.labelTextStyle = whiteText;

  CPScatterPlot *plot = [[[CPScatterPlot alloc] initWithFrame:graph.bounds] autorelease];
  plot.dataLineStyle.lineWidth = 2.0f;
  plot.dataLineStyle.lineColor = [CPColor blueColor];
  plot.dataSource = dataSource;
  [graph addPlot:plot];
  CPPlotSymbol *greenCirclePlotSymbol = [CPPlotSymbol ellipsePlotSymbol];
  greenCirclePlotSymbol.fill = [CPFill fillWithColor:[CPColor greenColor]];
  greenCirclePlotSymbol.size = CGSizeMake(2.0, 2.0);
  plot.plotSymbol = greenCirclePlotSymbol;                 

}

【问题讨论】:

    标签: iphone objective-c cocoa-touch core-plot


    【解决方案1】:

    我昨天/今天遇到了同样的问题,解决方案似乎是在轴上使用 orthogonalCoordinateDecimal 属性。例如:

    graph.axisSet.xAxis.orthogonalCoordinateDecimal = CPDecimalFromFloat(minHeight);
    

    【讨论】:

      【解决方案2】:

      您可以使用轴的 constantCoordinateValue 属性设置轴在正交轴上的位置。只需将 x 轴上的该属性设置为 y 的正值,轴就会向上移动。

      【讨论】:

        【解决方案3】:

        https://github.com/djw/core-plot/tree/9282845bddbb8c40ff314bbfa158beff797c91f7/examples

        这表明 isFloatingAxis 属性已从至少 0.9 版中删除。

        我也在讨论组里发现了这个http://code.google.com/p/core-plot/issues/detail?id=125

        经过一番摸索,浮动轴的新方法看起来像这样:

        x.axisConstraints = [CPTConstraints constraintWithUpperOffset:132];
        

        【讨论】:

          【解决方案4】:

          这个框架确实需要一种更好的方式来配置自己。我看不出有什么问题跳出来。也许只是尝试将方法简化到调试变得易于管理的程度。检查您传入的数据,以确保它是您所期望的。更好的是,创建一些你知道会产生你期望的情节的虚拟数据。

          【讨论】:

          • 数据一切正常。图表显示,y 轴显示,y 轴标签显示,绘图显示......只是 x 轴没有显示,也没有它的标签。数据的唯一问题是 y 值有时可能低于最小 y 值。会不会搞砸了?
          • 抱歉,对这个框架不太熟悉。但是,你有这个方法呢: plotRangeWithLocation:CPDecimalFromFloat(minDistance) length:CPDecimalFromFloat(maxDistance)];这是长度的正确值吗?例如。使用 alt,您的 maxAlt 是您的数据源最小值和最大值之间的差异,但对于距离,您的值介于 0 和数据源最大值之间。
          • 此外,作为一般观察,看起来整个图可能都在那里,但由于一些低 y 值,x 轴被截断。你能创建一个更简单的虚拟数据集(也许所有 y 都相同以产生一条水平线)来查看 x 轴是否出现?
          • 这似乎是数据。当我使用没有任何高度为 0 的点的轨道时,我可以看到轴。
          • 我认为我的问题最好表述为:我如何才能拥有一个不从零开始的 Y 轴?似乎 x 轴总是放置在 y=0 处,但我希望 x 轴在 y 轴上处于某个正数。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-31
          • 2011-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多