Я использую библиотеку danielgindi / Charts.В моем главном контроллере у меня есть табличное представление с 3 прототипами.Один из них предназначен для гистограммы, второй - для линейного графика, а третий - для круговой диаграммы.Есть также 3 многократно используемых метода ячеек, и методы настройки диаграмм находятся внутри них.Когда я впервые запускаю приложение, все мои гистограммы рисуются без каких-либо проблем.Тем не менее, когда я добавляю новые диаграммы или когда я прокручиваю (я не уверен, но я думаю, что одна из них приводит к странной проблеме), представление гистограммы выглядит странно, как показано на рисунке ниже. ![Weird one](https://i.stack.imgur.com/wHCdI.jpg)
![Normal one](https://i.stack.imgur.com/189iL.jpg)
Отображается как вторая, когда я впервые запускаю программу, но после некоторой прокрутки или добавления новых диаграмм она выглядит первой.Каждый набор данных охватывает ось х.Ниже приведен мой метод configureBarChart.
func configureBarChart(xTitle: IndexAxisValueFormatter, index: Int, chartData: BarChartData, chartType: String) {
barChartView.data?.setDrawValues(false)
barChartView.doubleTapToZoomEnabled = false
barChartView.chartDescription?.enabled = false
barChartView.animate(xAxisDuration: 1)
barChartView.xAxis.drawGridLinesEnabled = false
barChartView.xAxis.valueFormatter = xTitle
barChartView.xAxis.labelCount = index
barChartView.rightAxis.enabled = false
barChartView.xAxis.drawGridLinesEnabled = false
barChartView.xAxis.labelPosition = .bottom
barChartView.xAxis.centerAxisLabelsEnabled = true
barChartView.xAxis.granularity = 1
let leftAxisFormatter = NumberFormatter()
leftAxisFormatter.maximumFractionDigits = 1
barChartView.leftAxis.spaceTop = 0.35
barChartView.leftAxis.axisMinimum = 0
barChartView.leftAxis.drawGridLinesEnabled = false
barChartView.rightAxis.enabled = false
var groupSpace = 0.0
var barSpace = 0.0
var barWidth = 0.0
if (chartData.dataSetCount == 1) {
groupSpace = 0.3
barSpace = 0.0
barWidth = 0.7
} else if (chartData.dataSetCount == 2) {
groupSpace = 0.3
barSpace = 0.05
barWidth = 0.3
} else if (chartData.dataSetCount == 3) {
groupSpace = 0.25
barSpace = 0.05
barWidth = 0.2
} else if (chartData.dataSetCount == 4) {
groupSpace = 0.2
barSpace = 0.05
barWidth = 0.15
}
let groupCount = index
let startYear = 0
chartData.barWidth = barWidth;
barChartView.xAxis.axisMinimum = Double(startYear)
let gg = chartData.groupWidth(groupSpace: groupSpace, barSpace: barSpace)
if (chartType == "clustered") {
barChartView.xAxis.axisMaximum = Double(startYear) + gg * Double(groupCount)
chartData.groupBars(fromX: Double(startYear), groupSpace: groupSpace, barSpace: barSpace)
} else {
barChartView.xAxis.axisMaximum = Double(startYear) + 1 * Double(groupCount)
}
barChartView.setScaleEnabled(false)
if xTitle.values.count >= 10 {
barChartView.setVisibleXRangeMaximum(12)
} else {
barChartView.setVisibleXRangeMaximum(Double(xTitle.values.count)) // When too many data comes I limit it so data's are not covering each other.
}
}
Я также использую эту гистограмму для сгруппированной гистограммы, поэтому существует некоторый код barSpace и barWidth.В чем может быть причина изменения поведения графика и как я могу это исправить?
Редактировать: Вот мой метод cellForRowAt и получение данных гистограммы
if MainGrafikVC.barChartDataArray[indexPath.row].dataSetCount != 0 {
cell.barChartView.data = MainGrafikVC.barChartDataArray[indexPath.row]
cell.configureBarChart(xTitle: MainGrafikVC.xTitleArray[indexPath.row], index: MainGrafikVC.barChartDataArray[indexPath.row].getDataSetByIndex(0).entryCount, chartData: MainGrafikVC.barChartDataArray[indexPath.row], chartType: Servisler.servisListesi[MainGrafikVC.indexler[indexPath.row]].chartType)
}
if x10.count > 0 {
var barChartEntry10 = [BarChartDataEntry]()
for i in 0..<x10.count {
let value = BarChartDataEntry(x: Double(i), y: Double(x10[i]) ?? 0.0)
barChartEntry10.append(value)
}
let bar10 = BarChartDataSet(values: barChartEntry10, label: "10")
bar10.colors = ChartColorTemplates.vordiplom()
dataSets.append(bar10)
}
let data = BarChartData(dataSets: dataSets)
MainGrafikVC.barChartDataArray.append(data)
Я думаю, что проблема составляет около setVisibleXRangeMaximum , потому что, когда я это комментирую, все выглядит одинаково.Тем не менее, мне нужно установить видимую ось х, что может быть альтернативой этому?