2015-07-13 3 views
1

Я использую КСН-диаграмму для отображения по горизонтали BarChart с одним значением, как это:В ios-диаграммах, как установить максимальное значение для оси y?

var dataEntries: [BarChartDataEntry] = [] 
     let dataEntry = BarChartDataEntry(value: self.deductible!.deductiblePaid, xIndex: 0) 
     dataEntries.append(dataEntry) 
     let chartDataSet = BarChartDataSet(yVals: dataEntries, label: "Deductible") 
     let chartData = BarChartData(xVals: dataPoints, dataSet: chartDataSet) 


     self.horizontalBarChart!.data = chartData 
     self.horizontalBarChart!.leftAxis.customAxisMax = 3000.0 
     self.horizontalBarChart!.leftAxis.startAtZeroEnabled = false 

     chartDataSet.colors = ChartColorTemplates.vordiplom() 

Я попытался установить максимальное значение для YAxis, но его не влияющего на график. Редактировать: Пожалуйста, смотрите скриншот здесь: http://postimg.org/image/ogoj2t02f/ Что мне нужно, бар должен показывать верхний предел до 3000 (или указанную динамически) вместо расчетного верхнего предела.

Я изменил код, чтобы сделать это, вот то, что я в настоящее время:

self.horizontalBarChart!.noDataText = "You need to provide data for the chart." 

     self.horizontalBarChart!.setVisibleYRangeMaximum(3000, axis: ChartYAxis.AxisDependency.Left) 
     self.horizontalBarChart!.descriptionText = "" 
     var dataEntries: [BarChartDataEntry] = [] 
     let dataEntry = BarChartDataEntry(value: self.deductible!.deductiblePaid, xIndex: 0) 
     dataEntries.append(dataEntry) 
     let chartDataSet = BarChartDataSet(yVals: dataEntries, label: " ") 
     self.horizontalBarChart!.noDataText = "You need to provide data for the chart." 
     self.horizontalBarChart!.setViewPortOffsets(left: 0, top: 0, right: 0, bottom: 0); 
     let chartData = BarChartData(xVals: dataPoints, dataSet: chartDataSet) 

     self.horizontalBarChart!.autoScaleMinMaxEnabled = false 
     self.horizontalBarChart!.data = chartData 
     self.horizontalBarChart!.leftAxis.axisMaximum = 1600 
     self.horizontalBarChart!.leftAxis.axisMinimum = 00 
     self.horizontalBarChart!.rightAxis.axisMaximum = 1600 
     //self.horizontalBarChart!.leftAxis.customAxisMax = 3000.0 
     //self.horizontalBarChart!.leftAxis.startAtZeroEnabled = false 

     chartDataSet.colors = ChartColorTemplates.vordiplom() 
     self.horizontalBarChart!.xAxis.labelPosition = .Top 

     self.horizontalBarChart!.backgroundColor = UIColor(red: 189/255, green: 195/255, blue: 199/255, alpha: 1) 
     self.horizontalBarChart!.animate(xAxisDuration: 2.0, yAxisDuration: 2.0) 

Пожалуйста, дайте мне знать, если я не ясно, и вам нужно больше информации. Это было более сложным, чем я думал, что это будет! Любая помощь здесь была бы высоко оценена.

Второй Edit: У меня есть следующий код прямо сейчас:

func setHorizontalBarChartData() { 

     self.horizontalBarChart!.descriptionText = "" 
     var dataEntries: [BarChartDataEntry] = [] 
     let dataEntry = BarChartDataEntry(value: 900, xIndex: 0) 
     dataEntries.append(dataEntry) 
     let chartDataSet = BarChartDataSet(yVals: dataEntries, label: " ") 
     self.horizontalBarChart!.noDataText = "You need to provide data for the chart." 
     //self.horizontalBarChart!.setViewPortOffsets(left: 0, top: 0, right: 0, bottom: 0); 
     let deductible = [" "] 
     let chartData = BarChartData(xVals: deductible, dataSet: chartDataSet) 
     self.horizontalBarChart!.data = chartData 
     self.horizontalBarChart!.leftAxis.startAtZeroEnabled = false 
     self.horizontalBarChart!.rightAxis.startAtZeroEnabled = false 
     self.horizontalBarChart!.rightAxis.customAxisMax = 3000 
     self.horizontalBarChart!.rightAxis.customAxisMin = 10 
     chartDataSet.colors = ChartColorTemplates.vordiplom() 
     self.horizontalBarChart!.xAxis.labelPosition = .Top 
     self.horizontalBarChart!.backgroundColor = UIColor(red: 189/255, green: 195/255, blue: 199/255, alpha: 1) 
     self.horizontalBarChart!.animate(xAxisDuration: 2.0, yAxisDuration: 2.0) 
    } 

я все еще получаю то же самое: http://postimg.org/image/ogoj2t02f/ Что мне нужно, это только один бар со значениями ДО 3000 и гистограмму ближайшие ДО 900. Не могли бы вы помочь?

+0

Я пробовал оба свойства customAxisMax и axisMax, но они не работали. – userx

ответ

1

customAxisMax должен быть в состоянии вам помочь. Он отлично работает на моей стороне.

Возможно, вам не хватает, вы устанавливаете leftAxis, но вы должны знать, что есть rightAxis. Я не уверен, что вы используете.

Если вы посмотрите BarLineChartViewBase.swift', есть код в

internal override func calcMinMax:

_leftAxis.axisMaximum = !isnan(_leftAxis.customAxisMax) ? _leftAxis.customAxisMax : (maxLeft + topSpaceLeft) 
_rightAxis.axisMaximum = !isnan(_rightAxis.customAxisMax) ? _rightAxis.customAxisMax : (maxRight + topSpaceRight) 
_leftAxis.axisMinimum = !isnan(_leftAxis.customAxisMin) ? _leftAxis.customAxisMin : (minLeft - bottomSpaceLeft) 
_rightAxis.axisMinimum = !isnan(_rightAxis.customAxisMin) ? _rightAxis.customAxisMin : (minRight - bottomSpaceRight) 

Он читает customAxisMax или customAxisMin как только вы установите его. Вам нужно дважды проверить, какую ось вы используете.

Edit для редактирования второго:

Я просто изменить демонстрационный код, является это то, что вы хотите?

код в КСН-графики демо, попробовать его в демо-коде:

- (void)setDataCount:(int)count range:(double)range 
{ 
    NSMutableArray *xVals = [[NSMutableArray alloc] init]; 

    [xVals addObject:months[0]]; 

    NSMutableArray *yVals = [[NSMutableArray alloc] init]; 

    [yVals addObject:[[BarChartDataEntry alloc] initWithValue:900 xIndex:0]]; 

    BarChartDataSet *set1 = [[BarChartDataSet alloc] initWithYVals:yVals label:@"DataSet"]; 
    set1.barSpace = 0.35; 

    NSMutableArray *dataSets = [[NSMutableArray alloc] init]; 
    [dataSets addObject:set1]; 

    BarChartData *data = [[BarChartData alloc] initWithXVals:xVals dataSets:dataSets]; 
    [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]]; 
    _chartView.leftAxis.startAtZeroEnabled = NO; 
    _chartView.rightAxis.startAtZeroEnabled = NO; 
    _chartView.rightAxis.enabled = NO; 
    _chartView.leftAxis.customAxisMax = 3000; 
    _chartView.leftAxis.customAxisMin = 10; 

    _chartView.data = data; 
} 

скриншот: enter image description here

+0

Спасибо за ваш ответ @Winzergo. Я добавил несколько подробностей о том, что я пытаюсь сделать. См. Мои правки. – userx

+0

Я попытался настроить customAxisMax как для оси x, так и для оси y, но это не полностью повлияло. Он увеличился до 1200 (ранее это было 1000). Так как у меня есть небольшой прямоугольник для графического представления, может быть, мне нужно масштабировать его до соответствия? – userx

+0

Я пробовал с демо-кодом ios-charts, customAxisMin и customAxisMax отлично работает на моей стороне. Вы изменили код рендеринга? Не возражаете ли вы предоставить образец проекта? Вы можете попробовать демо-диаграмму горизонтальной диаграммы: ' _chartView.leftAxis.startAtZeroEnabled = NO; _chartView.rightAxis.startAtZeroEnabled = НЕТ; _chartView.leftAxis.customAxisMax = 100; _chartView.leftAxis.customAxisMin = 10; _chartView.data = data; 'он будет ограничивать leftAxis до 10 ~ 100 – Wingzero

4

Если верхние и более низкие значения по оси Y не показаны, как и ожидалось, убедитесь, ,

  1. установить customAxisMax и customAxisMin на левой и правой части оси у.
  2. вы установили customAxisMax и customAxisMax, прежде чем вы установите .data вида диаграммы.
  3. вы установили как x, так и осью y 'startAtZeroEnabled в false.И вы установили startAtZeroEnabled, прежде чем устанавливать .data вида диаграммы.

Мне потребовалось несколько часов, чтобы понять их. Надеюсь, это может спасти вас.

+0

Спасибо за ваш ответ. Я решил проблему в соответствии с первоначальным ответом. – userx

Смежные вопросы