swift - Swift:条形图内容未水平居中
问题描述
我使用 Daniel Gindi 的库 char https://github.com/danielgindi/Charts
我有一个问题,我无法将内容图表水平居中
我的代码:
private func setup(xValue: [String]) {
noDataText = "No data"
xAxis.drawGridLinesEnabled = false
xAxis.labelPosition = .bottom
xAxis.valueFormatter = IndexAxisValueFormatter(values: xValue)
xAxis.granularity = 1
xAxis.granularityEnabled = true
xAxis.labelCount = xValue.count
xAxis.axisMinimum = 0.0
xAxis.axisMaximum = Double(xValue.count)
leftAxis.spaceTop = 0.35
leftAxis.axisMinimum = 0
leftAxis.drawGridLinesEnabled = false
rightAxis.enabled = false
}
并创建图表:
private func setChart(xValue: xAxisValue, values: [SBChartEntry]) {
let dataSets: [BarChartDataSet] = values.map {
let set = BarChartDataSet(entries: $0.value.enumerated().map { index, element in
BarChartDataEntry(x: Double(index), y: element)
}, label: $0.name)
set.colors = [$0.color]
return set
}
let chartData = BarChartData(dataSets: dataSets)
let groupSpace: Double = (values.count > 1) ? 0.7 / (Double(values.count) * 2.2) : 0.6
let barSpace = (values.count > 1) ? 0.05 : 0
let barWidth: Double = (values.count > 1) ? 0.75 / Double(values.count) : 0.4
chartData.barWidth = barWidth
if values.count > 1 {
xAxis.centerAxisLabelsEnabled = true
chartData.groupBars(fromX: Double(0), groupSpace: groupSpace, barSpace: barSpace)
} else {
// For one bar
}
notifyDataSetChanged()
data = chartData
//chart animation
animate(xAxisDuration: 1, yAxisDuration: 1, easingOption: .linear)
}
当图表只包含一个数组时我无法配置(所以只有一个条形图)
谢谢
解决方案
解决方案:
private func setChart(xValue: xAxisValue, values: [SBChartEntry]) {
let dataSets: [BarChartDataSet] = values.map {
let set = BarChartDataSet(entries: $0.value.enumerated().map { index, element in
BarChartDataEntry(x: Double(index), y: element)
}, label: $0.name)
set.colors = [$0.color]
return set
}
let chartData = BarChartData(dataSets: dataSets)
let groupSpace: Double = (values.count > 1) ? 0.7 / (Double(values.count) * 2.2) : 0.9
let barSpace = (values.count > 1) ? 0.05 : 0.9
let barWidth: Double = (values.count > 1) ? 0.75 / Double(values.count) : 0.5
chartData.barWidth = barWidth
if values.count > 1 {
xAxis.axisMinimum = 0.0
xAxis.centerAxisLabelsEnabled = true
} else {
xAxis.axisMinimum = -1 // I Added this
}
chartData.groupBars(fromX: Double(0), groupSpace: groupSpace, barSpace: barSpace)
notifyDataSetChanged()
data = chartData
//chart animation
animate(xAxisDuration: 1, yAxisDuration: 1, easingOption: .linear)
}
推荐阅读
- javascript - jQuery:如何在追加 3 项后隐藏按钮(添加更多),如果从 3 项中删除一项,则显示按钮
- r - 以 data.table 中的第二个标识符为条件的组的平均观察次数
- javascript - 在每个按钮单击 javascript 添加到数组
- spring-boot - Postman/Insomnia 返回 200 但 Java 客户端在重新提交时返回 404
- json - 解析来自 Microsoft Graph API 的响应
- python - 为什么我在 python2.7 中导入 os.walk 时出错
- android - ExoPlayer 无法播放 RTMP 语音流
- momentjs - 如何使用momentjs找到给定月份的任何周六/周日?
- sql - 根据日期差异进行选择
- sharepoint-online - 为什么超过次要版本限制时,SharePoint Online 会删除最新的而不是最旧的次要版本?