iPhone CorePlot правильное форматирование оси Y - PullRequest
7 голосов
/ 08 ноября 2011

Я использую CorePlot для построения графика набора данных.Данные для моей оси X состоят из дат, в то время как данные для моей оси Y состоят из чисел с плавающей точкой (которые я затем превращаю в NSNumber).Я получаю данные из фида, и фид возвращает числа с большим количеством десятичных знаков, например: 0,46673718852844, 4.59392222219, 353.1293012045.Я использую следующий фрагмент кода для правильного форматирования оси Y:

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:3];
[numberFormatter setPositiveFormat:@"###0.000"];    
CPTXYAxis *y = axisSet.yAxis;
y.labelingPolicy = CPTAxisLabelingPolicyAutomatic;
y.minorTicksPerInterval = 1;
y.preferredNumberOfMajorTicks = 5;
y.labelFormatter = numberFormatter;

В большинстве случаев все работает нормально.Однако иногда он отображает одно и то же значение в нескольких позициях вдоль оси.См. Изображение ниже:

enter image description here

Значения представлены правильно, я просто хотел бы избежать ненужных (0,466) меток.Я даже пытался округлить числа до 3 десятичных знаков в методе numberForPlot:

if(fieldEnum == CPTScatterPlotFieldY)
{ 
        float floatNum = r.value;
        floatNum *= 1000;
        int intValue = (int) floatNum;
        float decimal = floatNum - intValue;
        if (decimal > 0.5) {
            intValue++;
        }
        floatNum = intValue /1000.0;
        return [NSNumber numberWithFloat:floatNum];

}

, но различий в метках нет.

Ответы [ 3 ]

1 голос
/ 08 ноября 2011

Свойство preferredNumberOfMajorTicks сообщает алгоритму маркировки, сколько тиковых меток использовать. Если вы хотите три галочки, установите его на 3. Вы также можете увеличить максимальное количество цифр дроби для форматера чисел, чтобы вообще избежать проблемы округления.

0 голосов
/ 25 января 2017

То, что я здесь сделал, было динамически установило моё свойство предпочитаемое_пространство_Материалы при построении графика. Так как мой форматер показывает 3 десятичных знака, я использовал следующий код, чтобы изменить количество тактов в зависимости от диапазона оси Y, чтобы форматировщик отображал уникальное значение на оси на каждом такте. Слишком много отметок означает, что десятичные разряды обрезаются и на оси Y есть повторяющиеся значения.

            CPTXYAxis *y          = axisSet.yAxis;
            {
                y.preferredNumberOfMajorTicks = round([newYRange.length floatValue]/0.001);
            }

Надеюсь, это поможет.

0 голосов
/ 08 ноября 2011

Я полагаю, что поскольку вы сказали, что хотите 5 основных тиков, это то, что вы получите, независимо от того, насколько близки значения по оси Y. Если вы чувствуете, что значения слишком близки друг к другу, вам, вероятно, придется настроить свойство предпочитаемое_пространство_Материалы.

В своем приложении, в котором я использую Core Plot, я отключил автоматическую маркировку осей и собираю собственные метки осей x и y. Это немного больше работы, но мне нравится возможность делать это самому.

...