我正在使用iOSCharts快速通过@ 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。
答案 0 :(得分:1)
查看ChartsDemo项目中BarchartViewController
的主版本,它会实现您的两个问题:
1)左轴对齐,见:
具体来说,你想在左轴上设置axisMinimum,例如它是:
self.barChartView.leftAxis.axisMinimum = 0.0
2)X轴值格式化。
这个有点棘手。您可以从ChartsDemo借用DayAxisValueFormatter,但这是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和值同步。
答案 1 :(得分:0)
您的第二个问题是X标签问题,是由此行引起的:
让dataEntry = BarChartDataEntry(x:Double(i),y:values [i])
当我怀疑你打算将它设置为x
时,i
值仅设置为Double(dateArray[i])
(作为双倍),如下所示:
让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(dateArray[i]), y: values[i])
dataEntries.append(dataEntry)
}
使用zip
和map
:
let dataEntries = zip(dateArray, values).map(BarChartDataEntry.init(x:y:))
此代码会将dateArray
的每个日期与value
的值配对。然后,通过传递到BarChartDataEntry.init(x:y:)
初始值设定项来转换这些对。这种技术很好,因为它不需要dataEntries
可变。
答案 2 :(得分:0)
尝试leftAxis.axisMinValue = 0.0