前提・実現したいこと
初心者です。
iOs-Chartsを使用して線グラフを作成しようとしています。
発生している問題・エラーメッセージ
問題点:プロットのラベルの値が小数点第2位まで表示されてしまう。 小数点第1位まで表示させたいと考えています。
該当のソースコード
swift
1 2import Foundation 3import UIKit 4import Charts 5 6class iosCharts: UIViewController, IAxisValueFormatter { 7 func stringForValue(_ value: Double, axis: AxisBase?) -> String { 8 return year[Int(value)] 9 } 10 11 var year: [String]! 12 var koshincod: [Double] = [] 13 weak var axisFormatDelegate: IAxisValueFormatter? 14 @IBOutlet var iosChartsFigure: LineChartView! { 15 didSet { 16 //x軸設定 17 iosChartsFigure.xAxis.labelPosition = .bottom //x軸ラベル下側に表示 18 iosChartsFigure.xAxis.labelFont = UIFont.systemFont(ofSize: 11) //x軸のフォントの大きさ 19 iosChartsFigure.xAxis.labelCount = Int(35) //x軸に表示するラベルの数 20 iosChartsFigure.xAxis.labelTextColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) //x軸ラベルの色 21 iosChartsFigure.xAxis.axisLineColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) //x軸の色 22 iosChartsFigure.xAxis.axisLineWidth = CGFloat(1) //x軸の太さ 23 iosChartsFigure.xAxis.drawGridLinesEnabled = true //x軸のグリッド表示 24 iosChartsFigure.xAxis.granularity = 1.0 25 //y軸設定 26 iosChartsFigure.rightAxis.enabled = false //右軸(値)の表示 27 iosChartsFigure.leftAxis.enabled = true //左軸(値)の表示 28 iosChartsFigure.leftAxis.axisMaximum = 14 //y左軸最大値 29 iosChartsFigure.leftAxis.axisMinimum = 0 //y左軸最小値 30 iosChartsFigure.leftAxis.labelFont = UIFont.systemFont(ofSize: 11) //y左軸のフォントの大きさ 31 iosChartsFigure.leftAxis.labelTextColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) //y軸ラベルの色 32 iosChartsFigure.leftAxis.axisLineColor = #colorLiteral(red: 0.05882352963, green: 0.180392161, blue: 0.2470588237, alpha: 1) //y左軸の色(今回はy軸消すためにBGと同じ色にしている) 33 iosChartsFigure.leftAxis.drawAxisLineEnabled = true //y左軸の表示 34 iosChartsFigure.leftAxis.labelCount = Int(5) //y軸ラベルの表示数 35 iosChartsFigure.leftAxis.drawGridLinesEnabled = true //y軸のグリッド表示(今回は表示する) 36 iosChartsFigure.leftAxis.gridColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1) //y軸グリッドの色 37 iosChartsFigure.leftAxis.valueFormatter = YAxisValueFormatter() 38 39 //その他UI設定 40 iosChartsFigure.noDataFont = UIFont.systemFont(ofSize: 30) //Noデータ時の表示フォント 41 iosChartsFigure.noDataTextColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) //Noデータ時の文字色 42 iosChartsFigure.noDataText = "Keep Waiting" //Noデータ時に表示する文字 43 iosChartsFigure.legend.enabled = false //"■ months"のlegendの表示 44 iosChartsFigure.dragDecelerationEnabled = true //指を離してもスクロール続くか 45 iosChartsFigure.dragDecelerationFrictionCoef = 0.6 //ドラッグ時の減速スピード(0-1) 46 iosChartsFigure.chartDescription?.text = nil //Description(今回はなし) 47 iosChartsFigure.backgroundColor = #colorLiteral(red: 0.501960814, green: 0.501960814, blue: 0.501960814, alpha: 1) //Background Color 48 iosChartsFigure.animate(xAxisDuration: 1.2, yAxisDuration: 1.5, easingOption: .easeInOutElastic)//グラフのアニメーション(秒数で設定) 49 } 50 } 51 52 override func viewDidLoad() { 53 super.viewDidLoad() 54 55 axisFormatDelegate = self 56 year = ["S49","S50","S51","S52","S53","S54","S55","S56","S57","S58","S59","S60","S61","S62","S63","H1","H2","H3","H4","H5","H6","H7","H8","H9","H10","H11","H12","H13","H14","H15","H16","H17","H18","H19","H20","H21","H22","H23","H24","H25","H26","H27","H28","H29","H30"] 57 koshincod = [12.0,12.0,12.0,10.0,12.0,11.0,9.9,9.7,9.8,10.0,11.0,10.0,10.0,10.0,10.0,10.0,10.0,9.1,9.4,9.8,11.0,11.0,10.0,9.4,12.0,9.7,9.2,9.1,9.8,9.1,9.0,8.3,8.0,7.9,8.1,7.5,8.0,7.8,7.7,7.4,7.6,7.2,8.0,7.8,8.8] 58 59 drawLineChart(xValArr: year, yValArr: koshincod) 60 61 } 62 63 //グラフ描画部分 64 func drawLineChart(xValArr: [String], yValArr: [Double]) { 65 iosChartsFigure.noDataText = "You need to provide data for the chart." 66 var yValues : [ChartDataEntry] = [ChartDataEntry]() 67 68 for (i, _) in yValArr.enumerated() { 69 let dataEntry = ChartDataEntry(x: Double(i), y: yValArr[i]) 70 yValues.append(dataEntry) //(ChartDataEntry(x: Double(i), y: dollars1[i])) 71 72 } 73 74 let data = LineChartData() 75 let ds = LineChartDataSet(entries: yValues, label: "year") //ds means DataSet 76 let xAxisValue = iosChartsFigure.xAxis 77 xAxisValue.valueFormatter = axisFormatDelegate 78 79 ////グラフのUI設定 80 //グラフのグラデーション有効化 81 let gradientColors = [#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1).cgColor, #colorLiteral(red: 0.2196078449, green: 1, blue: 0.8549019694, alpha: 1).withAlphaComponent(0.3).cgColor] as CFArray // Colors of the gradient 82 let colorLocations:[CGFloat] = [0.7, 0.0] // Positioning of the gradient 83 let gradient = CGGradient.init(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors: gradientColors, locations: colorLocations) // Gradient Object 84 ds.fill = Fill.fillWithLinearGradient(gradient!, angle: 90.0) // Set the Gradient 85 86 //その他UI設定 87 ds.lineWidth = 2.0 //線の太さ 88 //ds.circleRadius = 0 //プロットの大きさ 89 ds.circleRadius = 5.0 90 ds.drawCirclesEnabled = true //プロットの表示 91 ds.mode = .linear //直線にする 92 ds.fillAlpha = 0.8 //グラフの透過率 93 ds.drawFilledEnabled = false //グラフ下の部分塗りつぶし 94 //ds.fillColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) //グラフ塗りつぶし色 95 ds.drawValuesEnabled = true //各プロットのラベル表示 96 ds.highlightColor = #colorLiteral(red: 1, green: 0.8392156959, blue: 0.9764705896, alpha: 1) //各点を選択した時に表示されるx,yの線 97 ds.colors = [#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)] //Drawing graph 98 let ll = ChartLimitLine(limit: 5, label: "環境基準") 99 iosChartsFigure.leftAxis.addLimitLine(ll) 100 101 ////グラフのUI設定 102 103 data.addDataSet(ds) 104 self.iosChartsFigure.data = data 105 } 106 107 override func didReceiveMemoryWarning() { 108 super.didReceiveMemoryWarning() 109 } 110}
試したこと
初心者なりに多くのサイトから情報を収集してグラフ作成していますが、壁に当たってしまいました。
色々なサイトから引っ張ってきて作成したため、不要・余計なコードがあるかもしれませんがご容赦ください。
補足情報(FW/ツールのバージョンなど)
初質問ということもあり、回答に必要な情報が足りないかもしれません。
補足が必要であればご教授ください。
左側の数字の軸なので本題とは直接関係ありませんが、YAxisValueFormatter はどのような実装になっていますか?
確認ありがとうございます。
YAxisValueFormatterの実装は以下のコードです。
```
import Foundation
import Charts
class YAxisValueFormatter: NSObject, IAxisValueFormatter {
let numFormatter: NumberFormatter
override init() {
numFormatter = NumberFormatter()
numFormatter.minimumFractionDigits = 1
numFormatter.maximumFractionDigits = 1
numFormatter.minimumIntegerDigits = 1 // how many digits do want before decimal
numFormatter.paddingPosition = .beforePrefix
numFormatter.paddingCharacter = "0"
}
}
}
```
すみません。上記は間違いです。
以下がYAxisValueFormatterの実装は以下のコードです。
import Foundation
import Charts
class YAxisValueFormatter: NSObject, IAxisValueFormatter {
let numFormatter: NumberFormatter
override init() {
numFormatter = NumberFormatter()
numFormatter.minimumFractionDigits = 1
numFormatter.maximumFractionDigits = 1
numFormatter.minimumIntegerDigits = 1 // how many digits do want before decimal
numFormatter.paddingPosition = .beforePrefix
numFormatter.paddingCharacter = "0"
}
public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return numFormatter.string(from: NSNumber(floatLiteral: value))!
}
}
ありがとうございます。挙動確認してみます。
ありがとうございます。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー