Вопрос

Редактировать:Я думаю, что мой вопрос лучше сформулировать следующим образом:Как я могу иметь ось 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

Это было полезно?

Решение

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

Другие советы

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

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

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];

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top