2017-11-15 30 views
1

私はgnuplotを使っていくつかのマトリックスファイルをヒートマップとしてプロットしています。これらの行列は、水平(行列の高さは幅よりも小さい)または垂直(行列の高さは幅よりも大きい)にすることができます。Gnuplot:カラーボックスの固定幅を設定する

カラーボックスを除くすべてがうまくいきます。私はset size ratio -1を設定して、アスペクト比が1:1のクワットラットでヒートマップを取得しています。このコマンドは、グラフを拡大または縮小します。しかし、カラーボックスも伸縮します。

私は、マトリックスファイルのいくつかは非常に小さい幅を持っているので、私のカラーボックスのための一定の幅を持っていると思います - これは非常に薄いカラーボックスになります。私は自分のカラーボックスの幅を手動で設定しようとしました。しかし、原点と完全なサイズを手動で設定しなければ、これは不可能です。

横長

unset key 
set cbrange [0:5] 
set xrange [0:10] 
set yrange [0:5] 
set size ratio -1 
set cbtics out nomirror 
$map1 << EOD 
5 4 3 1 0 5 4 3 1 0 
2 2 0 0 1 2 2 0 0 1 
0 0 0 1 0 0 0 0 1 0 
0 0 0 2 3 0 0 0 2 3 
0 1 2 4 3 2 2 0 0 1 
EOD 
plot '$map1' using ($1+.5):($2+.5):($3) matrix with image 

enter image description here

垂直:

unset key 
set cbrange [0:5] 
set xrange [0:5] 
set yrange [0:10] 
set size ratio -1 
set cbtics out nomirror 
$map1 << EOD 
5 4 3 1 0 
2 2 0 0 1 
0 0 0 1 0 
0 0 0 2 3 
0 1 2 4 3 
5 4 3 1 0 
2 2 0 0 1 
0 0 0 1 0 
0 0 0 2 3 
2 2 0 0 1 
EOD 
plot '$map1' using ($1+.5):($2+.5):($3) matrix with image 

enter image description here

+1

起源と全体の大きさの両方を指定することが可能ですか?たとえば、 'set colorbox user origin graph 1.1、最初の0サイズの最初の1、グラフ1 'は、ピクセルの1つと同じ幅で、グラフ全体の高さのカラーボックスを作成します。この場合、カラーバーに少し余裕を持たせるために右余白を設定する必要があります。 – user8153

+0

ありがとう@ user8153!あなたは私を非常に助けました! 'set colorbox user origin graph 1、graph 0 size cbwidth、graph 1'を' set rmargin in screen 0.875'と組み合わせて使うことにしました。 'cbwith'は静的な幅で可変です。明日私はすべての詳細を完全に答えます。 – rweisse

答えて

1

@ user8153は、私の問題に対して素晴らしい解決策を提供しました。それは私の与えられた例のための魅力のように働く。しかし、私は彼の命令を少し変えなければならなかった。それ以外の場合は、私の本当の入力データでは動作しないでしょう。

# [...] 
cbwidth = 0.034 
rightmargin = 0.875 
set colorbox user origin graph 1, graph 0 size cbwidth, graph 1 
set rmargin at screen rightmargin 
# [...] 

これは、その横にカラーボックスでグラフをプロットします(グラフウィンドウとカラーボックスの間に隙間なく - 私たちはその後で修正します)。 colorboxsの幅は出力幅の3.4%です(pngやpngcairo、svg、epsなどの用語を使用する場合など)。

私は、グラフとカラーボックスの間のスペースを少し好みます。私のカラーボックスの起点(位置)はgraph 1, graph 0です。この位置は、グラフウィンドウの右下隅に等しくなります。 を意味するこのウィンドウの100%を意味します。余分なスペースを追加する場合は、この割合を増やすだけです。 @ user8153は、彼のコメントを見て - first 0graph 0に変更して、余分なスペース= origin graph 1.1, graph 0を10%追加することに決めました。不幸なことに、この100%はグラフウィンドウ(キャンバス幅ではなく、穴プロット画像)を参照し、グラフウィンドウの幅が行列のアスペクト比に応じて変化するため、静的な割合は設定できません。したがって、グラフウィンドウの実際の幅に応じて毎回この値を調整する必要があります。

これは自動的に行わ得るために、私は(この場合は1200x1200で、作物は空白をカットします)640×480よりも高い値に手動で端末のサイズを設定することをお勧め:その後

set term pngcairo size 1200,1200 crop 

をあなたはしていますあなたのカラーボックスのx位置を自由に計算できます。いずれかの場合は、gnuplots を/のように使用するか、別の言語を使用してください(私の場合、typescriptです。これは、ノードを通してgnuplotを呼び出すためです)。JS-gnuplotのラッパー - しかし、ロジックは同じです):

もちろん
const size = 1200    // canvas size (width and height): 1200px 
const cbspace = 0.017;  // prefered space between colorbox and window: 20px/1200px 
const rmargin = 0.875;  // right margin next to the graphs window 
let graphWindowWidth: number; // real width of the graphs window 

if (matrixHeight > matrixWidth) { 
    graphWindowWidth = (matrixWidth/matrixHeight) * size; 
} else { 
    graphWindowWidth = size * rmargin; 
} 
let cbPosX = (cbspace * size + graphWidth)/graphWidth; 

あなたははxticsとytics、x軸とy軸のラベルとタイトルがためにいくつかのスペースが必要であることを忘れてはなりません。これらは上位のアルゴリズムには含まれていません。実際のグラフウィンドウの幅を取得する方法については、誰かがより良い解決策を得ているのかもしれません。 set colorbox user origin graph 1, graph 0 size cbwidth, graph 1

:から

:あなたは、その値を得たら、カラーボックスの原点コマンド部分を変更することができset colorbox user origin graph cbPosX, graph 0 size cbwidth, graph 1

関連する問題