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

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

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

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

Q&A

解決済

1回答

3658閲覧

Swiftのcharts、PieChartのラベルの位置や色等についてです。

Hayato1201

総合スコア220

Swift

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

0グッド

0クリップ

投稿2018/09/21 12:27

以下の様にChartsのPieChartのラベルのフォーマットを設定しました。

Swift

1class CustomLabelFomatter: NSObject, IValueFormatter { 2 3 let types: [String] 4 let values: [Double] 5 6 init(types: [String], values: [Double]) { 7 self.types = types 8 self.values = values 9 } 10 11 func convert(value: Double) -> String { 12 guard let convertedString = values 13 .enumerated() 14 .filter({$0.element == value}) 15 .map({ tuple -> String in 16 17 let index = tuple.offset 18 let type = types[index] 19 20 if value < 3600 { 21 return "" 22 } 23 switch type { 24 case "blank": 25 return "" 26 default: 27 return "(type)\n(round((value/3600)*10)/10)h" 28 } 29 30 }).first else {fatalError()} 31 32 return convertedString 33 } 34 35 func stringForValue(_ value: Double, entry: ChartDataEntry, dataSetIndex: Int, viewPortHandler: ViewPortHandler?) -> String { 36 37 return convert(value: value) 38 } 39} 40/**********省略************************/ 41 42let dataSet = PieChartDataSet(values: entries, label: "") 43dataSet.valueFormatter = CustomLabelFomatter(types: labels, values: values)

以上の様にしてvalueとlabelを表示していますが、PieChartDataSetのプロパティでxValuePositionとyValuePositionで.outsideSliceの様にしてそれぞれの位置を変えられる様に、これもvalueの値を外にしてlabelの方を内側にするというった様な使い方をしたいです。それは可能でしょうか?またyValuePositionで位置を設定するとretun""で表示していない所にもlabelやvalueが出てしまうのを無くしたいです。更にlabel,valueの色も変えることなどは可能でしょうか??

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

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

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

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

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

guest

回答1

0

ベストアンサー

valueの値を外にしてlabelの方を内側にするというった様な使い方

これはdataSet.yValuePosition = .outsideSliceとしたあとdataSet.valueLinePart1LengthdataSet.valueLinePart2Lengthをマイナスの値を入れればlabelが内側に入ります。

またyValuePositionで位置を設定するとretun""で表示していない所にもlabelやvalueが出てしまうのを無くしたいです

これは多分そのままでは無理です(自分の知る限りでは)。引出し線の色の設定はdataSet.valueLineColor = .colorで出来るのですが、dataSetでまとめて設定されるため個別の設定が出来ない限り無理だと思われます。またPieChartViewDataは複数のdataSetを配列で受け取れるように見えますが、実際に複数のdataSetを配列で渡すとassertが出ます。どうしてもやりたいならライブラリに手を加えれば可能でしょう。

label,valueの色も変える

これはどちらも可能です。labelの色の変更はdata.setValueTextColor(.color)で可能です。valueの色はdataSet.colors = [.purple, .gray, .blue]みたいな形で好きな色を配列で渡します。配列に1色しか入れなかった場合、単色のPieChartになります。また、entryの数よりも少ない配列の要素数であった場合、配列の最後の色を入れたあと、配列の頭からまた色を取り出していくことになります。この辺りは説明するより実際に動かしてみた方が分かりやすいでしょう。

投稿2018/09/21 13:55

xAxis

総合スコア1349

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

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

Hayato1201

2018/09/21 14:44

早速のご回答ありがとうございました! labelの色についてですが、それぞれ個別には設定できないでしょうか??
xAxis

2018/09/21 14:50

個別に、と言うのがentryに対して設定出来ないのか、という意味でしたら無理です。 が、どのvalueがどのlabelと相関性を持っているかと言うのを把握するようにどのvalueがどの色かが分かればvalueの配列を作るがごとくUIColorの配列を作るのは容易い事でしょう。あとはその配列をdataSet.colorsに入れるだけです。
Hayato1201

2018/09/21 15:17

すみません、書き方が悪かったかもしれませんが、data.setValueTextColor(.color)ではlabelの色が一括して変わりますが、それを色の配列で作って設定するなどしてdataSet.colorsのどの色の時にどの文字の色になるかという事を決められるかどうかという事です!
xAxis

2018/09/22 04:39

はっきり言うべきでしたかね。自分の知っている範囲ではPieChartViewにおけるlabelの個別の色設定は不可能、valueの個別の色設定は可能です。 PieChartViewでのlabelの色の変更は上に書いてある通りのやり方以外は(自分の知っている限り)ありません。xAxisやyAxisのあるChartViewではIAxisValueFormatterを継承したCustomFomatterを作ればaxisBaseにアクセス出来るので個別に変更できますがPieChartViewにはyAxisがそもそもないですしxAxis.valueFormatterに代入しようとすればassertが出るのでどうにもなりません。 どうしても探したいなら各プロパティを書いてescを押して予測変換を出してその一覧から探し出すか、その書いたプロパティをクリックして選択状態にしたあとcontrol + command + クリックすればそのプロパティが書かれているところにjump出来ますから探してみるのもいいでしょう。
Hayato1201

2018/09/22 06:51

そうなんですね! 今回も詳細な回答助かりました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問