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

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

ただいまの
回答率

87.78%

Swiftでレーダーチャートを書きたい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,693

score 28

実現したいこと

ブログ記事を参考に、グラフ描画ライブラリ「ios-charts」を用いたデモファイル「iOSChartsDemo」をもとに、レーダーチャートを書きたいです。

エラー内容

Argument labels '(value:, xIndex:)' do not match any available overloads 

Incorrect argument label in call (have 'yVals:label:'; expected 'values:label:')

該当コード

該当のコードを以下に記します。

import UIKit
import Charts

class BarChartViewController: UIViewController {
    @IBOutlet weak var barChartView: BarChartView!

    var months: [String]!
    func setChart(dataPoints: [String], values: [Double]) {
        barChartView.noDataText = "You need to provide data for the chart."

        var dataEntries: [BarChartDataEntry] = []

        for i in 0..<dataPoints.count {
            let dataEntry = BarChartDataEntry(value: values[i], xIndex: i)
            dataEntries.append(dataEntry)
        }

        let chartDataSet = BarChartDataSet(yVals: dataEntries, label: "Units Sold")
        let chartData = BarChartData(xVals: months, dataSet: chartDataSet)
        barChartView.data = chartData

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        barChartView.noDataText = "You need to provide data for the chart."

        barChartView.noDataTextDescription = "GIVE REASON"
        months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
        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(months, values: unitsSold)
    }


}

スクリーンショット

エラーメッセージ

おそらく引数の記述に問題があるのだと思いますが、ググれどググれどわからず、どうかよろしくお願いします。
BarChartDataEntry, BarChartDataSetおよびBarChartDataの宣言元を下記に示します。

public class BarChartDataEntry: ChartDataEntry
{
    public required init()
    {
        super.init()
    }

    /// Constructor for stacked bar entries.
    public init(x: Double, yValues: [Double])
    {
        super.init(x: x, y: BarChartDataEntry.calcSum(yValues))
        self._yVals = yValues
        calcRanges()
        calcPosNegSum()
    }

    /// Constructor for normal bars (not stacked).
    public override init(x: Double, y: Double)
    {
        super.init(x: x, y: y)
    }

    /// Constructor for stacked bar entries.
    public init(x: Double, yValues: [Double], label: String)
    {
        super.init(x: x, y: BarChartDataEntry.calcSum(yValues), data: label)
        self._yVals = yValues
        calcRanges()
        calcPosNegSum()
    }

    /// Constructor for normal bars (not stacked).
    public override init(x: Double, y: Double, data: AnyObject?)
    {
        super.init(x: x, y: y, data: data)
    }
public class BarChartDataSet: BarLineScatterCandleBubbleChartDataSet, IBarChartDataSet
{
    public required init()
    {
        super.init()
        initialize()
    }

    public override init(values: [ChartDataEntry]?, label: String?)
    {
        super.init(values: values, label: label)
        initialize()
    }
public class BarChartData: BarLineScatterCandleBubbleChartData
{
    public override init()
    {
        super.init()
    }

    public override init(dataSets: [IChartDataSet]?)
    {
        super.init(dataSets: dataSets)
    }

補足情報(言語/FW/ツール等のバージョンなど)

バージョン情報

Alamofire 3.4
Charts 2.2.5
XCode 7
iOS 9.3.5

利用しているライブラリ

ios-charts
Alamofire
SwiftyJSON

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • fuzzball

    2016/09/09 13:23

    ファイルにライブラリが含まれていないようですが?

    キャンセル

  • takhub

    2016/09/09 14:34

    失礼しました。デモファイル「iOSChartsDemo」に加え、ライブラリ「ios-charts」を追記いたしました。

    キャンセル

回答 3

checkベストアンサー

+1

おそらく、質問のデモログラムのコードは、もともと
https://github.com/jorgecasariego/iOS-Examples
の「iOSChartDemo」から入手したものだと思います。

で、このデモプログラムを上記URLからダウンロードして入手し、
iOSChartsDemo/iOSChartsDemo.xcworkspace
を開いて実行したら、普通にエラーなく実行できました。

内容を確認してみると、このデモプログラムで使用しているChartsのバージョンは2.1.6で、最新版よりちょっと古い(2015/11/3リリース)ものです。現在の最新版はご存知の通り2.2.5ですが、2.1.6から2.2.5になるまでの間に今回エラーが出ている部分のパラメータ指定等いろいろ変わったようです。

つまり、今エラーが出ている原因は、2.1.6用のデモコードを使って2.2.5のChartsを実行しようとしているためです。

2.1.6を使いたいのであれば、この回答で示したURLからダウンロードすれば2.1.6のChartsも一緒にダウンロードされます。
しかし、私としてはやはり最新版の2.2.5を使うことをお勧めします。2.2.5のChartsを使うデモは、ChartsのGitHub(https://github.com/danielgindi/Charts)からダウンロードしたプロジェクトの
ChartsDemo/ChartsDemo.xcodeproj
を開いて実行すればいいです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/10 10:51

    ご丁寧に詳細ご説明くださりありがとうございます!
    おかげさまで何が起きているのか理解でき、旧版、最新版ともにデモプロジェクトを実行できました!

    補:途中で「Code signing is required for product type...」とのエラーが出てつまづきましたが、Target > Build Setting > Code Signing > Code Signing Identityで自身をiiPhone Developerとして選択することで解決しました。

    キャンセル

  • 2016/09/10 10:52

    fuzzballさんも前回に引き続きありがとうございました!

    キャンセル

+1

調べていないので、確認の仕方を共有します。

エラーが出ている、BarChartDataSetクラスの部分でコマンドキーを押しながらクリックすると
該当メソッドが宣言されているヘッダーファイルに飛ばされると思います。
そこに書かれているメソッドの引数の型と呼び出し時に渡されている値の型が一致しているか確認してみてください。
values[i] の値は一度変数か何かに一度取り出してから扱うともう少しデバッグ時は見やすいかもしれません。

2つ目のエラーも同様です。
的外れだったら、すみません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/09 13:12

    このような感じでしょうか?
    let dataEntry = BarChartDataEntry(value: values[i] as! String, xIndex: i)
    先のエラーに加え、Cast from 'Double' to unrelated type 'Float' always failsという警告が出てしまいます。
    BarChartDataSet()の方はエラーメッセージ通りyValsをvaluesにすると、その下の行でCannot invoke initializer for type 'BarChartData' with an argument list of type '(xVals: [String]!, dataSet: BarChartDataSet)'というエラーが吐かれます。

    引数についてですが、わからないというより見当たりません。それぞれ下記が宣言元です。

    - public class BarChartDataEntry: ChartDataEntry{...}
    - public class BarChartData: BarLineScatterCandleBubbleChartData{...}

    いろいろと勉強不足で申し訳ありませんが、よろしくお願いします。

    キャンセル

  • 2016/09/09 13:26

    init()です。複数ある場合は、今回使ってそうなやつを選んで下さい。分からなければinit()を全部書き出して下さい。(ここに書かずに質問欄に追記して下さい)

    キャンセル

  • 2016/09/09 14:35

    自分ではわからず、すみませんが全て質問欄に追記しました。

    キャンセル

+1

使っているChartsのバージョンが古いようです。
最新版(2.2.5)をインストールして下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/09 20:46

    承知しました。ご確認いただいてありがとうございます。引き続き原因さぐってみます。

    キャンセル

  • 2016/09/12 08:49

    解決しているのにアレですが、Charts 2.2.5 + 質問のコードでビルド&実行まで確認しました。グラフ(水色の棒グラフ)も表示されています。

    キャンセル

  • 2016/09/13 16:52

    fuzzballさん、わざわざ確認くださりありがとうございます!結局、最新のバージョンでやってみることにしました。

    キャンセル

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

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る