Rubyを使ってgnuplotで横軸がunix time(例えば22:50 ← 22時50分)のグラフを描画しようと思っていますがエラーが発生してしまいます。
ソースコードは下記のようになっています。
#やりたいこと
ohlc.csvの1列目はunix timeの秒での現在時刻。それら1列目を何時何分の形に直したものを横軸、4列目の値段を縦軸としてプロットしたい。
ソースコード↓
Ruby
1require "csv" 2require "gnuplot" 3 4ohlcs = CSV.read("./ohlc.csv") 5 6Gnuplot.open do |gp| 7 Gnuplot::Plot.new( gp ) do |plot| 8 plot.title 'a' 9 plot.ylabel 'Price' 10 plot.xlabel 'Time' 11 plot.xdata 'time' 12 plot.timefmt "'%H:%M'" 13 #plot.xrange "['00:00:00':'23:59:59']" このテスト段階では要らない。 14 15 16 x = Array.new #x軸のデータ 17 ohlcs.each do |abc| #xにcsvファイルからデータを入れていく(abcという文字列は適当です) 18 x.push(Time.at(abc[0].to_i).strftime("%H:%M")) #strftimeで何時何分とする 19 end 20 21 y = Array.new #y軸のデータ 22 ohlcs.each do |oooo| #yにcsvファイルからデータを入れていく(ooooという文字列は適当です) 23 y.push(oooo[4]) 24 end 25 26 plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds| 27 ds.with = "lines" 28 end 29 end 30end
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に関する初歩的なミスか何かかもしれないです。
エラーメッセージなど色々調べてみましたが正直お手上げで分かりません。
解決策・ヒント等ありましたらお教えください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。