2010-01-13 84 views
5

编辑:我认为我的问题更好措词如下:我怎么能有一个不从零开始的Y轴?看起来x轴始终位于y = 0处,但我希望x轴在y轴上处于某个正数。为什么我的X轴不会在iPhone上显示核心图?

下面是与更规则数据的图...我只希望x轴被设置在最小的y值的曲线图(约77),而不是在0

alt text

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

这是一大堆代码,我不太确定哪一部分可能不显示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;     

} 

alt text

回答

5

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

1

该框架确实需要一个更好的方式来配置自身。我没有看到任何问题跳出来。也许只是试着简化方法,使调试变得易于管理。检查您传递的数据以确保它符合您的期望。更好的是,创建一些你知道会产生你期望的阴谋的虚拟数据。

+0

的数据是所有罚款。图形显示,y轴显示,y轴标签显示,图显示...只是x轴不显示,也没有标签。数据唯一的问题是y值有时可能低于最小y值。这会搞砸了吗? – 2010-01-13 06:00:37

+0

对不起,不太熟悉这个框架。但是,你有这个方法呢:plotRangeWithLocation:CPDecimalFromFloat(minDistance)length:CPDecimalFromFloat(maxDistance)]; 这是正确的长度值吗?例如。同时你有maxAlt是你的数据源min和max之间的差异,但是对于距离你有它在0和数据源max之间。 – 2010-01-13 06:40:37

+0

此外,作为一般观察,它看起来像整个图表可能在那里,但由于一些低y值切断x轴。你可以创建一个更简单的虚拟数据集(也许在所有的y都相同的情况下产生一条水平线)来查看x轴是否出现了吗? – 2010-01-13 06:41:41

6

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

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

minHeight是什么? – 2014-07-21 07:01:46

相关问题