gnuplotのメモリの変更について

このQ&Aのポイント
  • gnuplotを使用して片対数のグラフを作成する方法について質問です。特に、10^-4~10^-13の範囲をグラフに表示する方法を知りたいです。
  • 目標は、gnuplotを使用して10^-4~10^-13の範囲を持つ片対数スケールのグラフを作成することです。しかし、現在のコードではエラーメッセージが表示されてしまいます。
  • 10^-4>0、10^-13>0であるにもかかわらず、gnuplotでのグラフ作成中に「y range must be greater than 0 for log scale」というエラーメッセージが表示されてしまいます。対処方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

gnuplotのメモリの変更について

現在 gnuplot4.4.2を使ってグラフを作っております。 gnuplotで片対数のグラフを書くことはできるのですが、目盛りの変更がうまくできません。 そこで質問なのですが、 gnuplotで10^-4~10^-13までの範囲をグラフで書くためには、どのようにすればいいのですか。 ちなみに plot yrange [10^-4:10^-13] と書くと、 y range must be greater than 0 for log scale という、エラーメッセージが現れます。 しかし、 10^-4>0、10^-13>0 なので、どうしてエラーが出るのか分かりません。 どなたか、ヒントだけでもいいので教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

マニュアルの「演算子」のところをよく読みましょう。 参考: http://takeno.iee.niit.ac.jp/~foo/gp-jman/gp-jman.html → 13.2.2 二項演算子 (Binary) http://takeno.iee.niit.ac.jp/~foo/gp-jman/data/20100913/gnuplot-ja-div/node28.html べき乗は ** です。 ^ビット毎の排他的論理和(XOR)、被演算子は整数、負は2の補数表現なので 10^-4 = 1010(2) ^ 11..1 1100(2) = 11..1 0110(2) = -10 10^-2 = 1010(2) ^ 11..1 1110(2) = 11..1 0100(2) = -12 となり、0以下なのでメッセージ通り対数軸には使えません。

tigers007
質問者

お礼

ご回答ありがとうございました。 こんな初歩的な質問に丁寧に回答をくださって、ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

gnuplot のべき乗は ^ じゃないんだよ.

tigers007
質問者

お礼

こんな初歩的な質問に回答していただきまして、ありがとうございました。

関連するQ&A

  • gnuplotが分かる方教えてください。

    貯蔵弾性率と損失弾性率のグラフを描くにあたり、 横軸をG’(ω)/GおよびG''(ω)/G、縦軸をωτとなるグラフをgnuplotで描きたいのですが、 gnuplot>plot x**2/(1+x**2), x/(1+x**2) gnuplot>set logscale xy gnuplot>replot ではだめでしょうか。 何回やっても、x/x2 range must be greater than 0 for log scale!というエラーメッセージが出てしまいます。どう直せばいいか分かる方教えてください。

  • gnuplotで片対数グラフ の書き方について

    gnuplotで対数グラフを書く際に 100.0msec 1.0sec 10.0sec (x軸) 1nsec 10nsec 100nsec(y軸)で、 それを「対数グラフ用紙」に作成していきたいのです。 100.0msec 1.0sec 10.0sec (x軸) 1nsec 10nsec 100nsec(y軸)の部分は >set grid >set yrange [ y_min : y_max ] >set xrange [ y_min : y_max ] とすれば、範囲とグリッド線を書けるのは調べたられたのですが (範囲はどうやったら、100.0msec 1.0secとかの値になってくれるのかは 分かっていませんが…) gnuplotで対数グラフ用紙のような背景を書けるかもわからないので 書けない とい事がわかるだけでも 有難いです! でも、できるのであれば書きたいです。 どなたか 分かる方は教えてください! よろしくお願いいたします

  • Maximaとgnuplotについて

    Maximaの計算結果をgnuplotでグラフ表示する場合に、 [plot format,gnuplot]をつけ、 ホーム・ディレクトリに maxout.gnuplot というファイルが生成されて、 gnuplot上で  load 'maxout.gnuplot' with lines などと入力しグラフ表示しても expecting end of line というエラーが出てきてグラフ表示されません。 maxout.gnuplot というファイルはMaximaのどのフォルダに出来なくてはいけないのでしょうか? 実際には、c:\Users\自分の名前 のフォルダにファイルが出来てしまいます。 ファイルの置き場所が適切ではないからグラフ表示しないのでしょうか? もしそうでしたら、どこに置けばいいんでしょうか? あとgnuplotを別途、Maximaとは別にダウンロードしたんですが、 Maximaのbinフォルダにもwgnuplotがあるんですね。 wgnuplotはgnuplotと同じと考えていいんですかね? 同じならgnuplotをダウンロードしなくてもよかったかな。。。

  • 両対数グラフを縦横2倍で拡大したい

    両対数グラフにプロットしたグラフを, 両対数グラフで縦横2倍に拡大したいのですが、目盛りの取り方がわかりません。

  • gnuplotでのグラフ作成について

    タイトルに在るとおりgnuplotを使用してのグラフ作成について質問させていただきます。 作成したいグラフの数式は、 z=h(x,y) h(x,y)=1/1+√<x^4+y^4> ×{xsin(4√<x^4+y^4>)+ycos(√<x^4+y^4>)} ただし、 x と y の範囲は -3 から 3 まで というものです。こういった形で数式を書くことに慣れていないため、見づらいところ多々在るでしょうが、ご容赦ください。 恥ずかしながらgnuplotというソフトに触れることが初めてなため、検索などを利用して自分なりに調べた結果なのですが。 1 h(x,y)=~ で h の数式を設定。 2 set xrange[-3:3] 3 set yrange[-3:3] で x y の範囲を指定。 4 sprot h(x,y) でグラフを作成する という流れになるのではないか、ということがなんとなくですがわかりました。 ここで私は、x yの範囲を指定後、h をプロットしようとするところで、hの情報が不足している(?)とのメッセージにて弾かれてしまいます。 恐らく私の、h の数式入力に不備が在るのだろうと思います。 平方根をsqrt 乗数は**n になることはわかっているのですが、どうにも手詰まりです。 お力添えをいただけないでしょうか。よろしくお願いします。

  • gnuplotでのプロット方法

    以下のように書いたdatファイルを入力して、gnuplotでplotコマンドを使ってグラフを書こうとしたところ「Bad error on line 1」というエラー表示が出ました。cdコマンドを使って正しくカレントディレクトリを指定していますし、なにより1行目は#(ちゃんと半角シャープを使用しています)でコメントアウトしているのでエラーとなる節が思い当たりません。どこが間違っているのかお分かりでしたら教えて下さい。宜しくお願いします。 【datファイルの入力内容】 #cosine_of_angle relative_error 0.965926 19.91228 0.866025 20.78947 0.707107 14.73684 0.5 14.5614 0.258819 8.026316

  • 対数目盛の読み方を教えてください

    対数グラフの目盛の読み方がまったくわかりません。 グラフの縦線の間隔が、太くなったり細くなったりしている意味もわかりません。 しかも、“log”を使って計算しなければならない。とか。。。 誰か教えてください。

  • gnuplotをC言語で操作する方法

    C言語を用いてgnuplotを操作しデータファイルから自動的にグラフを作成するプログラムを作ろうとしています。 使用環境はWindows7、VisualStudio2010です。 ほとんどの部分はうまくいったのですが一部分が正しく表示されません。 軸の目盛ラベルの表示フォーマット設定のコマンドで set format x "%.1f" として小数点以下一桁を強制的に表示させるためC言語でパイプを用いて #define GNUPLOT_PATH "C:/gnuplot/binary/pgnuplot.exe" int plot(char *file_name){ FILE *gp; gp = _popen(GNUPLOT_PATH, "w"); fprintf(gp, "set title 'TEST PLOT'\n"); : (中略) : fprintf(gp, "set format x '%.1f' \n");//この部分が正しく反映されません。 : (中略) : fprintf(gp, "plot '%s' using 1:2 with linespoints lt 4 lw 5 pt 6 ps 2.0 lc rgb 'red'\n",file_name); fprintf(gp,"quit \n"); fflush(gp); _pclose(gp); return 0; } '%.2f' の部分をいろいろいじってみたのですがうまくいかず、なぜできないのか原因がわかりません。 fprintf()の数値代入の %f と混ざってしまっているのでしょうか?

  • gnuplotでreplotできない??

    下記のプログラムを書きました。 下記のプログラムでは1枚のグラフの複数のグラフをどんどん重ね、さらに1つのemfファイルとして出力し保存しようとしています。 しかし、問題が発生しました。 プログラム中のfprintf(gp, "replot (x+1)*x*(x-1)\n");を消すとプログラムは動くのですがreplotがあるとうまく画像ファイルが保存されません。 emfファイルはできている(ファイル容量は0ではない。)のですが、emfファイルが壊れており見ることができません。 その理由がわかる方がいましたら、教えていただけないでしょうか? よろしくお願いします。 以下、書いたプログラムです。 #include <stdio.h> #include <windows.h> #include <tchar.h> #include <string> #include<conio.h> using namespace std; #define GNUPLOT_PATH "C:/gnuplot/gnuplot/binary/gnuplot.exe" //char *a[10]; char a[10][50]; long n; long l; int main() { FILE *gp; gp = _popen(GNUPLOT_PATH, "w"); if (gp == NULL) { fprintf(stderr, "Oops, I can't find %s.", GNUPLOT_PATH); exit(EXIT_FAILURE); } // gnuplotにコマンドを送る fprintf(gp, "set terminal emf color 'Ryumin-Light-EUC-H' 16\n"); fprintf(gp, "set output '%s.emf'\n", a[n]); fprintf(gp, "set title '日本語-入力テスト'\n"); //x軸の範囲の設定 //fprintf(gp, "set xrange [-60:60]\n"); //fprintf(gp, "set yrange [0:3]\n"); fprintf(gp, "set grid\n"); fprintf(gp, "set datafile separator ','\n"); fprintf(gp, "set datafile separator ','\n"); fprintf(gp, "set key bottom outside\n"); fprintf(gp, "plot sin(x)\n");     fprintf(gp, "replot (x+1)*x*(x-1)\n"); fflush(gp); // バッファに格納されているデータを吐き出す(必須) //getchar(); // 入力待ち _pclose(gp); exit(EXIT_SUCCESS); return 0; }

  • 対数グラフの描画範囲

    対数グラフの描画範囲についての質問です。 x成分の値の範囲が約70~200のデータを対数グラフにプロットしたくて「散布図」で対数グラフを作成しましたが、x軸の目盛りの範囲がどうしても10~1000になってしまいます。このままだと数本のグラフが狭い範囲で重なり合ってしまいとても見づらいのですが、この範囲を70~200のように設定することは出来るのでしょうか? また、対数グラフの場合で「直線の近似曲線」を引くことは可能でしょうか?「マーカーを右クリック→近似曲線の追加→線形近似」をしても曲線になってしまい困ってます。