Как установить ось x на данные гистограммы - ios-charts?

Ранее мы могли установить ось x данных гистограммы, как показано ниже:

BarChartData *data = [[BarChartData alloc] initWithXVals:xvals dataSets:dataSets];

В последнем обновлении библиотеки ios-charts синтаксис изменился на следующий: - BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets];

Как установить ось x на BarChartData?


person pkc456    schedule 27.01.2017    source источник
comment
Что вам нужно показать в XAxis, не могли бы вы мне сказать? или предоставьте скриншот того, чего вы пытаетесь достичь, чтобы я мог получить правильное представление?   -  person CodeChanger    schedule 27.01.2017
comment
Я узнаю, что значения x будут отображаться с помощью IAxisValueFormatter и его метода делегата stringForValue. Когда я попытался использовать IAxisValueFormatter в моем viewController, я получаю сообщение об ошибке: - cannot find protocol declaration. В этом ответе описан подход при работе с swift. Можете ли вы сказать мне то же самое в объективе c.   -  person pkc456    schedule 27.01.2017


Ответы (2)


С помощью этого Ответа (быстрая версия) я могу показать строковые значения xAxis на гистограмме в Objective-C.

NSMutableArray *xValsDietArray;

Настройте данные диаграммы. Основной пример выглядит следующим образом: -

for (int i=0; i<dietArray.count; i++) {
    DietInput *obj = [dietArray objectAtIndex:i];
    NSString *dateStr = @"Jan";
    [xValsDietArray addObject:dateStr];//Maintain this xValsDietArray. It will be used later on while setting x values. This contains array of x-axis values
    [yvals addObject:[[BarChartDataEntry alloc]initWithX:[[xValsDietArray objectAtIndex:i] doubleValue] y:obj.calorieInput.doubleValue data:xValsDietArray] ];
}

BarChartDataSet *set1 = [[BarChartDataSet alloc] initWithValues:yvals label:@"Water Consumed"];
NSMutableArray *dataSets = [[NSMutableArray alloc] init];
[dataSets addObject:set1];
BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets];
cell.chartView.data=data;
cell.chartView.xAxis.valueFormatter = self;// Set the delegate to self. THIS IS THE MAIN ADDITION IN NEW CHART LIBRARY

Реализуйте метод делегата stringForValue следующим образом:

- (NSString * _Nonnull)stringForValue:(double)value axis:(ChartAxisBase * _Nullable)axis
{
    NSString *xAxisStringValue = @"";
    int myInt = (int)value;

    if(xValsDietArray.count > myInt)
        xAxisStringValue = [xValsDietArray objectAtIndex:myInt];

    return xAxisStringValue;
}
person pkc456    schedule 30.01.2017
comment
Но как это возможно, поскольку вы устанавливаете значение в BarChartDataEntry, а в методе делегата, который вы используете в качестве объекта, я подозреваю, что с этим что-то не так. - person CodeChanger; 30.01.2017

Вы можете использовать ниже тот же метод IAxisValueFormatter с value в качестве индекса и извлечения данных из xArray и показать в нем свой собственный X values.

#pragma mark - IAxisValueFormatter

- (NSString *)stringForValue:(double)value
                        axis:(ChartAxisBase *)axis
{
    NSString *xValue = [xArray objectAtIndex:value];
    return xValue;
}

Вы можете использовать это как методы делегата IAxisValueFormatter.

Надеюсь, это поможет вам установить xAxis на графике.

person CodeChanger    schedule 27.01.2017
comment
Я сделал точно так же. Но значение не рассматривается как индекс. - person pkc456; 27.01.2017
comment
Можете ли вы показать мне свой код BarChartDataEntry, чтобы было легко решить вашу проблему? - person CodeChanger; 27.01.2017
comment
[[BarChartDataEntry alloc] initWithX:idx y:yValue]; Этот. - person CodeChanger; 27.01.2017
comment
Давайте продолжим обсуждение в чате здесь - person pkc456; 27.01.2017