質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

1343閲覧

(Swift)ios-chartsで最初のプロットが表示されない

_cocapeach

総合スコア20

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/02/28 12:07

お世話になります。
Swiftのグラフライブラリios-chartsを使用して、折れ線グラフを作っています。
最初のプロット(下記画像の赤い丸で囲んでいる箇所)に緑の丸が表示されない現象で悩んでおります。
色んな参考サイトを拝見しましたが皆さん、最初のプロットにも丸が表示されていました。
原因がわからないため、どなたかご教示頂けますと幸いです。
イメージ説明

   override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() // y軸のプロットデータ(検証用) let unitsSold = [55.0, 100.0, 80.0, 100.0, 45.0,55.0, 100.0, 80.0, 100.0, 45.0,55.0, 100.0, 80.0, 100.0, 45.0] initDisplay(y: unitsSold) } func initDisplay(y: [Double]) { self.scrollView = UIScrollView(frame: CGRect(x: 0, y: (self.navigationController?.navigationBar.frame.origin.y)! + (self.navigationController?.navigationBar.frame.height)!, width: self.view.frame.width, height: ((self.view.frame.height - ((self.navigationController?.navigationBar.frame.origin.y)! + (self.navigationController?.navigationBar.frame.height)!)) / 2) - 100)) self.scrollView.showsHorizontalScrollIndicator = false self.chartView = LineChartView(frame: CGRect(x: 0, y: 0, width: CGFloat(y.count * 65), height: ((self.view.frame.height - ((self.navigationController?.navigationBar.frame.origin.y)! + (self.navigationController?.navigationBar.frame.height)!)) / 2) - 100)) self.chartView.delegate = self // プロットデータ(y軸)を保持する配列 var dataEntries = [ChartDataEntry]() for (i, val) in y.enumerated() { let dataEntry = ChartDataEntry(x: Double(i), y: val) // X軸データは、0,1,2,... dataEntries.append(dataEntry) self.circleColors.append(UIColor.green) } // グラフをUIViewにセット lineDataSet = LineChartDataSet(values: dataEntries, label: "") chartView.data = LineChartData(dataSet: lineDataSet) // X軸のラベルを設定 let xaxis = XAxis() xaxis.valueFormatter = ChartFormatter() chartView.xAxis.valueFormatter = xaxis.valueFormatter // x軸のラベルをボトムに表示 chartView.xAxis.labelPosition = .bottom // x軸のラベル数をデータの数に設定 chartView.xAxis.labelCount = dataEntries.count - 1 // タップでプロットを選択できないようにする chartView.highlightPerTapEnabled = false chartView.leftAxis.axisMaximum = 100 //y左軸最大値 chartView.leftAxis.axisMinimum = 0 //y左軸最小値 chartView.leftAxis.labelCount = 5 //y軸ラベルの表示数 chartView.leftAxis.drawTopYLabelEntryEnabled = true // y軸の最大値のみ表示 chartView.leftAxis.forceLabelsEnabled = true //最小最大値ラベルを必ず表示? chartView.rightAxis.enabled = false // Y軸右軸(値)を非表示 chartView.extraTopOffset = 25 // 上から20pxオフセット chartView.noDataText = Const.RESULT_DATA_NOT_EXIST // データがない場合の表示文言 chartView.legend.enabled = false // 左下のラベル非表示 chartView.pinchZoomEnabled = false // ピンチズームオフ chartView.doubleTapToZoomEnabled = false // ダブルタップズームオフ // グラフの棒をニョキッとアニメーションさせる chartView.animate(xAxisDuration: 1.0, yAxisDuration: 1.0) // 横に赤いボーダーラインを描く(平均点で使用) let ll = ChartLimitLine(limit: 10.0, label: "") chartView.leftAxis.addLimitLine(ll) // グラフの色 lineDataSet.colors = [UIColor.green] // プロットの色 lineDataSet.circleColors = self.circleColors // プロットの大きさ lineDataSet.circleRadius = 5.0 // チャートが画面横幅をはみ出ていれば if self.chartView.frame.origin.x + self.chartView.frame.width > self.view.frame.width { //スクロール領域の設定 self.scrollView.contentSize = CGSize(width:self.chartView.frame.origin.x + self.chartView.frame.width, height:((self.view.frame.height - ((self.navigationController?.navigationBar.frame.origin.y)! + (self.navigationController?.navigationBar.frame.height)!)) / 2) - 100) } self.scrollView.addSubview(self.chartView) self.view.addSubview(self.scrollView) }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

手元で再現を試みましたが、特に問題なく出てしまいました。

※podsで入れた時に3.2.1が入ったようですが(最新は3.2.2なのになして?)。

Installing Charts (3.2.1)

そちらでも同じコードで同じように正しく表示されるようでしたら、
差分の部分に要因が隠れていそうです。

swift

1import UIKit 2import Charts 3 4class ViewController: UIViewController { 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 // y軸のプロットデータ(検証用) 10 let unitsSold = [55.0, 100.0, 80.0, 100.0, 45.0,55.0, 100.0, 80.0, 100.0, 45.0,55.0, 100.0, 80.0, 100.0, 45.0] 11 12 initDisplay(y: unitsSold) 13 } 14 15 func initDisplay(y: [Double]) { 16 let chartView = LineChartView(frame: CGRect(x: 30, y: 30, width: 500, height: 200)) 17 18 //self.chartView.delegate = self 19 20 // プロットデータ(y軸)を保持する配列 21 var dataEntries = [ChartDataEntry]() 22 23 for (i, val) in y.enumerated() { 24 let dataEntry = ChartDataEntry(x: Double(i), y: val) // X軸データは、0,1,2,... 25 dataEntries.append(dataEntry) 26 //self.circleColors.append(UIColor.green) 27 } 28 // グラフをUIViewにセット 29 let lineDataSet = LineChartDataSet(values: dataEntries, label: "") 30 chartView.data = LineChartData(dataSet: lineDataSet) 31 32 // X軸のラベルを設定 33 let xaxis = XAxis() 34 //xaxis.valueFormatter = ChartFormatter() 35 chartView.xAxis.valueFormatter = xaxis.valueFormatter 36 37 // x軸のラベルをボトムに表示 38 chartView.xAxis.labelPosition = .bottom // x軸のラベル数をデータの数に設定 39 chartView.xAxis.labelCount = dataEntries.count - 1 40 // タップでプロットを選択できないようにする 41 chartView.highlightPerTapEnabled = false 42 chartView.leftAxis.axisMaximum = 100 //y左軸最大値 43 chartView.leftAxis.axisMinimum = 0 //y左軸最小値 44 chartView.leftAxis.labelCount = 5 //y軸ラベルの表示数 45 chartView.leftAxis.drawTopYLabelEntryEnabled = true // y軸の最大値のみ表示 46 chartView.leftAxis.forceLabelsEnabled = true //最小最大値ラベルを必ず表示? 47 chartView.rightAxis.enabled = false // Y軸右軸(値)を非表示 48 chartView.extraTopOffset = 25 // 上から20pxオフセット 49 //chartView.noDataText = Const.RESULT_DATA_NOT_EXIST // データがない場合の表示文言 50 chartView.legend.enabled = false // 左下のラベル非表示 51 chartView.pinchZoomEnabled = false // ピンチズームオフ 52 chartView.doubleTapToZoomEnabled = false // ダブルタップズームオフ 53 // グラフの棒をニョキッとアニメーションさせる 54 chartView.animate(xAxisDuration: 1.0, yAxisDuration: 1.0) 55 // 横に赤いボーダーラインを描く(平均点で使用) 56 let ll = ChartLimitLine(limit: 10.0, label: "") 57 chartView.leftAxis.addLimitLine(ll) 58 // グラフの色 59 lineDataSet.colors = [UIColor.green] 60 // プロットの色 61 lineDataSet.circleColors = [NSUIColor.green] 62 // プロットの大きさ 63 lineDataSet.circleRadius = 5.0 64 65 66 view.addSubview(chartView) 67 } 68} 69

実行結果:(iPad)
イメージ説明

投稿2019/03/06 06:59

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_cocapeach

2019/03/06 07:51

takabosoft 様 お世話になります。 検証までしていただき、ありがとうございます。 Githubにこのバグのプルリクエストがありました。 https://github.com/danielgindi/Charts/pull/3865 次回のバージョンで修正されるとの事です。 とりあえずは、手作業でソースコードを修正することで、対応いたしました。
takabosoft

2019/03/06 08:30

あー、3.2.2でバグったんですね。
guest

0

自己解決

https://github.com/danielgindi/Charts/pull/3865
ライブラリのバグだったようです。

投稿2019/03/06 07:51

_cocapeach

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問