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

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

ただいまの
回答率

90.83%

  • Ruby

    6779questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • UNIX

    362questions

    UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

  • gnuplot

    5questions

gnuplotでのエラー(time絡み) on Ruby

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 161

riana

score 2

Rubyを使ってgnuplotで横軸がunix time(例えば22:50 ← 22時50分)のグラフを描画しようと思っていますがエラーが発生してしまいます。
ソースコードは下記のようになっています。

やりたいこと

ohlc.csvの1列目はunix timeの秒での現在時刻。それら1列目を何時何分の形に直したものを横軸、4列目の値段を縦軸としてプロットしたい。

ソースコード↓

require "csv"
require "gnuplot"

ohlcs = CSV.read("./ohlc.csv")

Gnuplot.open do |gp|
    Gnuplot::Plot.new( gp ) do |plot|
        plot.title  'a'
        plot.ylabel 'Price'
        plot.xlabel 'Time'
        plot.xdata 'time'
        plot.timefmt "'%H:%M'"
        #plot.xrange "['00:00:00':'23:59:59']"  このテスト段階では要らない。


        x = Array.new     #x軸のデータ
        ohlcs.each do |abc|      #xにcsvファイルからデータを入れていく(abcという文字列は適当です)
            x.push(Time.at(abc[0].to_i).strftime("%H:%M"))  #strftimeで何時何分とする
        end

        y = Array.new   #y軸のデータ
        ohlcs.each do |oooo|    #yにcsvファイルからデータを入れていく(ooooという文字列は適当です)
            y.push(oooo[4])     
        end

        plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds|
            ds.with = "lines"
        end
    end
end

ohlc.csv↓

1524379200,985517,985808,985500,985755,91.994545,90677790
1524379260,985756,985756,985500,985500,74.65732,73583060
1524379320,985601,986348,985571,986348,99.8083,98415260
1524379380,986363,986955,986329,986737,116.59706,115043000
1524379440,986690,986754,986000,986166,78.39699,77326240
1524379500,986200,986445,986010,986339,49.193996,48517360
1524379560,986360,986900,986200,986888,52.066086,51362852
1524379620,986806,987000,986601,987000,79.39549,78351170
1524379680,987000,987530,986887,987421,140.37213,138577140
1524379740,987421,988000,987258,987270,138.28537,136554340
1524379800,987300,987352,987013,987134,74.81261,73849496
1524379860,987037,988000,986722,987760,97.528496,96276616
1524379920,987769,987900,987236,987236,71.632706,70743336
1524379980,987219,987258,987135,987144,4.192801,4138949.8


を実行すると、

gnuplot> plot '-' with lines
                            ^
         line 0: Need full using spec for x time data


gnuplot> 15-40 985755
         ^
         line 0: invalid command


gnuplot> 15-41 985500
         ^
         line 0: invalid command
.
.
.
以下同様に全行分line 0: invalid command


とエラーが出てしまいます。

・time関連を使用せず秒での現在時刻のまま(ohlc.csvファイルにあるとおりのまま)plotすればうまくいきますが,横軸を時間として扱おうとしてplot.xdata 'time'やplot.timefmt "'%H-%M'"を使うと上手くいかないようです。

・Need full using spec for x time dataの原因はデータが存在しないから、というのを検索して見つけましたが、x,yへのデータを入れるのをGnuPlot.openの前にしても同様のエラーがでました。

・pでx,yを出力すると
["15:40", "15:41", "15:42", "15:43", "15:44", "15:45", "15:46", "15:47", "15:48", "15:49", "15:50", "15:51", "15:52", "15:53"]
["985755", "985500", "986348", "986737", "986166", "986339", "986888", "987000", "987421", "987270", "987134", "987760", "987236", "987144"]
となるので値を入れるのは成功しているようです。
このデータ、例えば15:40が"15:40"という文字列として扱われていることが原因かなと思ったりしました。ただ"15:40"を文字列ではないとして扱えるようにする方法が分からないです。

今回初めてgnuplotというものを使ったのでgnuplot自体分かっていないのでgnuplotに関する初歩的なミスか何かかもしれないです。
エラーメッセージなど色々調べてみましたが正直お手上げで分かりません。

解決策・ヒント等ありましたらお教えください。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

まだ回答がついていません

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

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

関連した質問

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

  • Ruby

    6779questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • UNIX

    362questions

    UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

  • gnuplot

    5questions