#ios #swift #charts #mpandroidchart #ios-charts
#iOS #swift #Диаграммы #mpandroidchart #ios-диаграммы
Вопрос:
Я использую iOSCharts для swift от @danielgindi https://github.com/danielgindi/Charts
Итак, вот мой набор данных
let dateArray = [26,27,28,29,30,01,02]
let values = [11.0,5.0,0.0,0.0,4.0,1.0,0.0]
var dataEntries: [BarChartDataEntry] = []
for i in 0..<dateArray.count {
let dataEntry = BarChartDataEntry(x: Double(i), y: values[i])
dataEntries.append(dataEntry)
}
let data = BarChartData()
let ds1 = BarChartDataSet(values: dataEntries, label: "Hello")
ds1.colors = [NSUIColor.red]
data.addDataSet(ds1)
self.barChartView.data = data
self.barChartView.fitBars = true
self.barChartView.gridBackgroundColor = NSUIColor.white
self.barChartView.chartDescription?.text = ""
но то, что я получаю, это
Итак, как вы можете видеть, проблемы приведены ниже
1) График, начинающийся с одной сетки выше, вы видите пробел внизу 2) метки xaxis разные, я не уверен, как их установить. 3) Я хочу показывать метки осей x и y как int, а не double.
Ответ №1:
Ознакомьтесь с основной версией BarchartViewController
проекта ChartsDemo в проекте ChartsDemo, в нем реализованы оба ваших вопроса:
1) Выравнивание по левой оси, см.:
В частности, вы хотите установить axisMinimum на левой оси, для вашего примера это будет:
self.barChartView.leftAxis.axisMinimum = 0.0
2) Форматирование значений оси X.
Это немного сложнее. Вы могли бы позаимствовать DayAxisValueFormatter из ChartsDemo, но это код Objective-C, поэтому вам нужно быть знакомым с добавлением Objective-C в ваш проект.
Вы также можете получить именно то, что просили, сделав свой контроллер представления IAxisValueFormatter и реализовав его следующим образом:
class MyViewController: UIViewController, IAxisValueFormatter {
var dateArray: [Int] = [26,27,28,29,30,01,02] //member variable
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return dateArray[i]
}
//edit: forgot to say this earlier, you need to do this somewhere in your bar graph setup code
self.barChwrtView.xAxis.formatter = self
}
Вы должны синхронизировать dateArray и значения при каждом обновлении диаграммы.
Ответ №2:
Ваша вторая проблема, проблема с меткой X, возникает в этой строке:
пусть DataEntry = BarChartDataEntry(x: Double(i), y: значения [i])
x
Значение устанавливается просто i
равным (как двойное), когда я подозреваю, что вы хотели установить его Double(dateArray[i])
так:
пусть dateArray = [26,27,28,29,30,01,02] пусть значения = [11.0,5.0,0.0,0.0,4.0,1.0,0.0]
var dataEntries: [BarChartDataEntry] = []
for i in 0..<dateArray.count {
let dataEntry = BarChartDataEntry(x: Double(dateArray[i]), y: values[i])
dataEntries.append(dataEntry)
}
Этот код можно сократить с помощью zip
и map
:
let dataEntries = zip(dateArray, values).map(BarChartDataEntry.init(x:y:))
Этот код будет сопоставлять каждую дату dateArray
со значением from value
. Затем эти пары преобразуются путем передачи в BarChartDataEntry.init(x:y:)
инициализатор. Этот метод хорош, потому что он устраняет необходимость dataEntries
быть изменяемым.
Комментарии:
1. Привет, спасибо, можете ли вы помочь мне с первой проблемой. Почему ниже есть пробел
2. barChartView.legend.enabled = false
Ответ №3:
попробуйте leftAxis.axisMinValue = 0.0