BarChart Didn't Show Correctly When Replacing Point in BarDataSet
owenzhao opened this issue · 3 comments
owenzhao commented
if let barChartData = barChartData {
BarChart(chartData: barChartData)
.touchOverlay(chartData: barChartData)
.xAxisLabels(chartData: barChartData)
.yAxisLabels(chartData: barChartData)
.floatingInfoBox(chartData: barChartData)
}
private func appendBarChartData(_ log:DTLog, limit: Int) {
let xAxisLabel = DateFormatter.localizedString(from: log.startTime, dateStyle: .none, timeStyle: .medium)
let color = ColourStyle(colour: log.connected ? .green : .red)
let point = BarChartDataPoint(value: Double(log.delay), xAxisLabel: xAxisLabel, colour: color)
let style = BarStyle(barWidth: 1, cornerRadius: CornerRadius(topLeft: 5, topRight: 5, bottomLeft: 5, bottomRight: 5),
colourFrom: .barStyle, colour: color)
if barChartData == nil {
let points = (1...limit).map { _ in getEmptyBarChartDataPoint() }
barChartData = BarChartData(dataSets: BarDataSet(dataPoints: points),
barStyle: style)
}
if let barChartData = barChartData {
if let zeroIndex = barChartData.dataSets.dataPoints.firstIndex(where: { $0.value == 0 }) {
barChartData.dataSets.dataPoints[zeroIndex] = point
} else {
barChartData.dataSets.dataPoints.removeFirst()
barChartData.dataSets.dataPoints.append(point)
}
}
}
private func getEmptyBarChartDataPoint() -> BarChartDataPoint {
return BarChartDataPoint(value: 0, colour: .init(colour: .yellow))
}
When the app ran, the bar chart didn't show properly. The overlay and info box were correct. But the bar didn't draw.
sample.mov
owenzhao commented
A Workaround I found was to recreate BarChartData each time.
private func appendBarChartData(_ log:DTLog, limit: Int) {
let xAxisLabel = DateFormatter.localizedString(from: log.startTime, dateStyle: .none, timeStyle: .medium)
let color = ColourStyle(colour: log.connected ? .green : .red)
let point = BarChartDataPoint(value: Double(log.delay), xAxisLabel: xAxisLabel, colour: color)
let style = BarStyle(barWidth: 1, cornerRadius: CornerRadius(topLeft: 5, topRight: 5, bottomLeft: 5, bottomRight: 5),
colourFrom: .barStyle, colour: color)
if barChartData == nil {
let points = (1...limit).map { _ in getEmptyBarChartDataPoint() }
barChartData = BarChartData(dataSets: BarDataSet(dataPoints: points),
barStyle: style)
}
if let barChartData = barChartData {
var points = barChartData.dataSets.dataPoints
points.removeFirst()
points.append(point)
self.barChartData = BarChartData(dataSets: BarDataSet(dataPoints: points),
barStyle: style)
}
}
willdale commented
v2.10.0 should fix this.
owenzhao commented
I forked this project and I thought for a period updated bar chart, my new animation was fitter.