Почему моя ось X не отображается с основным графиком на iPhone? - PullRequest
5 голосов
/ 13 января 2010

РЕДАКТИРОВАТЬ: я думаю, что мой вопрос лучше сформулировать как: Как я могу иметь ось Y, которая не начинается с нуля? Похоже, что ось X всегда размещается в точке Y = 0, но я бы хотел, чтобы ось X была в некотором положительном числе по оси Y.

Вот график с более регулярными данными ... Я просто хотел бы, чтобы ось 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

Ответы [ 4 ]

6 голосов
/ 06 июля 2010

У меня была такая же проблема вчера / сегодня, и решение, похоже, использует свойство orthogonalCoordinateDecimal на оси. Например:

graph.axisSet.xAxis.orthogonalCoordinateDecimal = CPDecimalFromFloat(minHeight);
5 голосов
/ 13 января 2010

Вы устанавливаете положение оси на ортогональной оси, используя свойство constantCoordinateValue этой оси. Просто установите для этого свойства на оси x положительное значение y, и ось должна переместиться вверх.

3 голосов
/ 05 января 2012

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];
1 голос
/ 13 января 2010

этот фреймворк действительно нуждается в лучшем способе настройки. Я не вижу никаких проблем, выпрыгивая. Может быть, просто попробуйте упростить метод до такой степени, что отладка станет управляемой. Проверьте данные, которые вы передаете, чтобы убедиться, что это именно то, что вы ожидаете. А еще лучше, создайте несколько фиктивных данных, которые, как вы знаете, дадут вам ожидаемый сюжет

...