8

私は gnuplot をまったく初めて使用し、グーグルで調べても有効な解決策が見つかりませんでした。

次のようなデータマトリックスがあります。

  A B C D E
A 0 2 3 4 5
B 6 0 8 9 0
C 1 2 0 4 5
D 6 7 8 0 0
E 1 2 3 4 0

私がやりたいことはplot 'result.csv' matrix with image、x 軸に AE、y 軸に AE のラベルを付けて、ヒートマップをプロットすることです。この行列は常に同じサイズではありませんが、行の数は常に列の数と等しく、常にラベルが付けられています。

誰かがこれで私を助けてくれますか? コマンドを使用する必要があると思いますがusing、これまでのところ、これは完全なブードゥー教のように見えます...

どうもありがとう!

4

2 に答える 2

12

これは実際にはおかしな話であり、*nix シェル マジックがなければ実現できません。

まず、x 目盛りラベルと y 目盛りラベルを取得します。

XTICS="`awk 'BEGIN{getline}{printf "%s ",$1}' test.dat`"
YTICS="`head -1 test.dat`"

この時点で、XTICS はストリング「FGHI J」であり、YTICS はストリング「ABCD E」です。

ここで、反復によって xtics を設定します。

set for [i=1:words(XTICS)] xtics ( word(XTICS,i) i-1 )
set for [i=1:words(YTICS)] ytics ( word(YTICS,i) i-1 )

2 つの gnuplot 組み込み関数 (wordおよびwords) を使用しました。 words(string)指定された文字列に含まれる単語の数をカウントします (単語は、スペースで区切られた文字列です)。 word(string,n)文字列の n 番目の単語を返します。

これで、データファイルをプロットできます...唯一の問題は、データファイル内のすべての行と列matrixを使用したいということです。キーワードを使用して実際に読み取られる行/列を削減できる場合がありますが、行列ファイルでそれを行う方法がわかりません。シェル ユーティリティ ( and )に頼り続ける方がおそらく簡単だと思います。everyawksed

plot "<awk '{$1=\"\"}1' test.dat | sed '1 d'" matrix w image
#######^ replace the first field with nothing
################################## ^ delete first line

そして今、あなたのプロットは(うまくいけば)あなたが望むように見えます.

また、反復を使用しているため、このスクリプトは gnuplot 4.3 以降でのみ機能することに注意してください。現在の安定版は 4.6 であるため、問題ないことを願っています。

于 2012-05-29T12:31:12.437 に答える
5

わかりました、この質問は古いですが、gnuplot には既に実装されているはるかに簡単な方法があります。

plot 'result.csv' matrix rowheaders columnheaders with image

http://gnuplot.sourceforge.net/demo/heatmaps.htmlから入手しました

于 2017-06-21T08:46:38.193 に答える