【发布时间】:2017-01-29 09:02:47
【问题描述】:
我正在使用 ios 图表来显示条形图。看起来像这样:
我想要实现的是红色框中的标签(对于所有条形,我只是不想如此频繁地重复这一点......:P)。这意味着每个栏都有自己的“标题”标签,因此用户可以看到每个值的类别名称。
另一个问题是:我添加的条越多,条越小。我可以以某种方式将 BarChartView 放入滚动视图中,将条形的宽度设置为静态值,例如,还有 20 个值,用户只需向右滚动即可查看更多值?
编辑代码:
func entries(for chart:ChartType, content:ChartContent, max:Int = Int.max)->[ChartDataEntry]{
let transactions = manager.transactions.value
let grouped = content == .category ? transactions.categorise({$1.category}) : transactions.categorise({$1.payee})
var entries:[ChartDataEntry] = []
let formatter = NumberFormatter()
formatter.locale = Locale.current
formatter.numberStyle = .currency
for i in 0..<grouped.count {
let c = Array(grouped.keys)[i]
let ts = grouped[c]!
var sum = 0.0
ts.forEach{k,t in
if t.expense{
sum += Double(t.value)
}
}
if chart == .pie{
let entry = PieChartDataEntry(value: sum, label: "\(c)")
if entries.count < max{
entries.append(entry)
}else{
entries.sort(by: {$0.0.y > $0.1.y})
break
}
}else if chart == .bar{
let entry = BarChartDataEntry(x: Double(i), y: sum, data: c as AnyObject?)
if entries.count < max{
entries.append(entry)
}else{
entries.sort(by: {$0.0.y > $0.1.y})
break
}
}
}
return entries
}
func showBarChart(content: ChartContent){
// Do any additional setup after loading the view.
let data = BarChartData()
let content = entries(for: .bar, content: content)
let ds1 = BarChartDataSet(values: content, label: "")
let xAxis=XAxis()
let chartFormmater = ChartFormatter()
chartFormmater.content = content as! [BarChartDataEntry]
for i in 0..<content.count{
chartFormmater.stringForValue(Double(i), axis: xAxis)
}
xAxis.valueFormatter=chartFormmater
barChartView.xAxis.valueFormatter=xAxis.valueFormatter
barChartView.xAxis.labelPosition = .bottom
ds1.colors = ChartColorTemplates.material()
data.addDataSet(ds1)
self.barChartView.data = data
self.barChartView.gridBackgroundColor = NSUIColor.white
self.barChartView.animate(xAxisDuration: 0.0, yAxisDuration: 1.0)
}
@objc(BarChartFormatter)
class ChartFormatter:NSObject,IAxisValueFormatter{
var content:[BarChartDataEntry]!
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return content[Int(value)].data as! String
}
}
【问题讨论】:
-
请添加您的代码。谢谢
-
你是如何创建这个的 - 以及你是如何使用格式化程序的?
-
@user2529173 stackoverflow.com/questions/41979926/…
标签: ios swift ios-charts