web-dev-qa-db-ja.com

gnuplotでポイントを具体的にマークする

グラフをプロットし、グラフにいくつかの重要なポイントを表示したいとします。 gnuplotでこれを行うにはどうすればよいですか?たとえば、y = x2、(2,4)と(4,16)を表示したい。

5
finemann

私がこれを書いているとき、最初のグーグル結果メソッドは非常に不十分であるため、上記の答えはあまり役に立たないと思います。

Stdoutを読み取ってデータを生成するgnuplotの機能を使用して、

plot "< echo '1 2'"

ポイントx = 1、y = 2に単一のデータポイントを配置します。

これにはいくつかの欠点があり、ほとんど使用できません。

まず、このメソッドはすでに両方のタイプの引用符を使用しているため、このメソッドに変数を渡す良い方法はありません。したがって、sprintfステートメントで変数を渡すためのマクロの使用は無効になります。これは、3番目のタイプの引用符が必要になるためです。

次に、ポイントを存在させるために、plotコマンドを実行する必要があります。つまり、プロットしたいポイントが複数ある場合は、メインのプロットステートメントにプロットステートメントを追加する必要があります。明示的なリストとしてではなく、スクリプト化された方法でこれを実行したい場合は、マクロを実行する必要があります。これは、すでに指摘したように、この手法では機能しません。

Gnuplotには、単一のポイントを生成するのにはるかに適した2つの手法があります。

まず、あるポイントにマーカーが必要な場合は、gnuplotオブジェクトタイプを使用して、そのポイントに円をプロットできます。

set object circle at <x>,<y> size <r>

ここで、<x><y>は点の座標であり、<r>は描画される円のサイズです。円は、他のgnuplotオブジェクトと同様に、色付け、塗りつぶし、透明化などを行うことができます。

次に、特定のポイントスタイルのマーカーが本当に必要な場合は、gnuplotのlabelコマンドを使用できます。ラベルテキストを空に設定し、ポイントタイプを割り当てると、指定した座標にポイントが描画されます。

set label <i> "" at <x>,<y> point pointtype <n>

タグインデックス<i>のポイントをポイントx=<x>y=<y>のポイントタイプ<n>に設定します(デフォルトのwxtターミナルでは、n = 1は赤十字、n = 2は緑の聖アンデレ十字、n = 3は青いアスタリスクなどです...)

このようにして、プロットする複数のポイントを設定でき、プロットするすべての単一ポイントでプロットステートメントを乱雑にすることなく、別の関数に対して個別のプロットコマンドを発行できます。

11
KDN

まず、f()をプロットする関数を定義する必要があります。たとえば、べき乗記号**を使用します。 2つのグラフをプロットします。1つは関数用で、もう1つは重要なポイント用です。次に、ポイント4 162 4のデータを入力します。 eを使用して終了できます。

f(x) = x ** 2
plot f(x), '-' with points
4 16
2 4
e

これで、必要に応じてレンダリングをカスタマイズできます。

1
IamaTacos