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

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

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

gnuplot(ニュープロット)は、2次元や3次元のグラフ作成ができるソフトウェアです。さまざまな数式やデータ集計などのグラフを描写することが可能で、特に2次元グラフを描画する機能は強力です。

Ruby

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

UNIX

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

Q&A

1回答

2004閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

gnuplot

gnuplot(ニュープロット)は、2次元や3次元のグラフ作成ができるソフトウェアです。さまざまな数式やデータ集計などのグラフを描写することが可能で、特に2次元グラフを描画する機能は強力です。

Ruby

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

UNIX

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

0グッド

0クリップ

投稿2018/04/26 16:40

編集2018/04/27 08:04

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に関する初歩的なミスか何かかもしれないです。
エラーメッセージなど色々調べてみましたが正直お手上げで分かりません。

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

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

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

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

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

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

guest

回答1

0

gnuplotからのエラーメッセージ

line 0: Need full using spec for x time data

は、「x軸に時刻データを設定("plot.xdata 'time'")して場合は、plotコマンドのusingオプションを用いて列の指定を明示してください」というメッセージです。これを、rubyのgnuplotライブラリ中で行うには、あなたのコードの最後の部分を次のように変更してください。

plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds| ds.with = "lines" ds.using = "1:2" ### これを追加 end end end

投稿2020/11/03 05:45

binz

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問