Почему моя ось x не отображается с core-plot на iPhone?
-
20-09-2019 - |
Вопрос
Редактировать:Я думаю, что мой вопрос лучше сформулировать следующим образом:Как я могу иметь ось 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;
}
Решение
Положение оси на ортогональной оси задается с помощью свойства 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];
этот фреймворк действительно нуждается в лучшем способе настройки самого себя.Я не вижу никакой проблемы с выпрыгиванием.Может быть, просто попробуйте упростить метод до такой степени, чтобы отладка стала управляемой.Проверьте данные, которые вы передаете, чтобы убедиться, что они соответствуют вашим ожиданиям.А еще лучше, создайте несколько фиктивных данных, которые, как вы знаете, приведут к созданию ожидаемого графика.