###前提・実現したいこと
Qiitaの記事ios-charts チャート表示ライブラリ Xcode8 + Swift3を参考に、iOS-Chartsを使って棒グラフを作成してみようと思ったのですが、とある箇所の引数が理解できずに困っています。
public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
// 0 -> Jan, 1 -> Feb...
return months[Int(value)]
}
この関数に疑問を持ち、
stringForValue(_ value: Double, axis: AxisBase?)
の第一引数である
「_ value: Double」はどこから値が呼ばれているか知りたいです。
教えていただければ幸いです。よろしくお願いいたします。
###試したこと
print(value)置き、value値を確かめたところ、
0.0、1.0、2.0、3.0、4.0、...となりました。
X軸やY軸の個数(unitsSoldやmonthsの配列の増減 例)共に4つ格納)を変化すると実行結果が
0.0、0.7、1.4、2.1、2.8、3.5
となったりします。
###補足情報(言語/FW/ツール等のバージョンなど)
swift 3.0 / Xcode 8.3.3 / Charts 3.0.2 を使用しています。
###ソースコード
// ChartViewController.swift import UIKit import Charts class ChartViewController: UIViewController { // ここに棒グラフを描きます @IBOutlet weak var myChartView: BarChartView! override func viewDidLoad() { super.viewDidLoad() // y軸のプロットデータ let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0] setChart(y: unitsSold) } func setChart(y: [Double]) { // プロットデータ(y軸)を保持する配列 var dataEntries = [BarChartDataEntry]() for (i, val) in y.enumerated() { let dataEntry = BarChartDataEntry(x: Double(i), y: val) // X軸データは、0,1,2,... dataEntries.append(dataEntry) } // グラフをUIViewにセット let chartDataSet = BarChartDataSet(values: dataEntries, label: "Units Sold") myChartView.data = BarChartData(dataSet: chartDataSet) // X軸のラベルを設定 let xaxis = XAxis() xaxis.valueFormatter = BarChartFormatter() myChartView.xAxis.valueFormatter = xaxis.valueFormatter // x軸のラベルをボトムに表示 myChartView.xAxis.labelPosition = .bottom // グラフの色 chartDataSet.colors = [UIColor(red: 230/255, green: 126/255, blue: 34/255, alpha: 1)] // グラフの背景色 myChartView.backgroundColor = UIColor(red: 189/255, green: 195/255, blue: 199/255, alpha: 1) // グラフの棒をニョキッとアニメーションさせる myChartView.animate(xAxisDuration: 2.0, yAxisDuration: 2.0) // 横に赤いボーダーラインを描く let ll = ChartLimitLine(limit: 10.0, label: "Target") myChartView.rightAxis.addLimitLine(ll) // グラフのタイトル myChartView.chartDescription?.text = "Cool Graph!" } } public class BarChartFormatter: NSObject, IAxisValueFormatter{ // x軸のラベル var months: [String]! = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] // デリゲート。TableViewのcellForRowAtで、indexで渡されたセルをレンダリングするのに似てる。 public func stringForValue(_ value: Double, axis: AxisBase?) -> String { // 0 -> Jan, 1 -> Feb... return months[Int(value)] } }
回答2件
あなたの回答
tips
プレビュー