2012-10-03 19 views
5

Gnuplotを使って異なる軸が独立したスケールを持つスパイダー(別名レーダー/スター)プロットを作りたいと思います。私はOriginPro(商用)を使ってそのようなプロットを作成することができますが、Gnuplotでは一様なスケールのレーダープロットしか設定できません。あなたは、各軸のスタンドを見ることができるように - https://www.dropbox.com/s/uvqubzqvm6puhb8/spider.pdfGnuplotでスパイダープロットを作成するには?

# FEATURE, Product_A, Product_B, Product_C, Product_D 
attribute_1, 2, 10, 7, 3.5 
attribute_2, 1, 0.5, 3,4 
attribute_3, 37, 58, 49, 72 
attribute_4, 1985, 1992, 2006, 2010 
attribute_5, 0.1, 0.5, 0.3, 0.8 

と私が探していますプロットはこの1つである次の(最初の行は列ラベルである)のような

(csvファイル)データセットが見えます異なる属性のために、独自のスケールを持っています。

set polar 
set grid polar 
set angles degrees 
set size square 
set style data filledcurves 

しかし、私は続行する方法がわからない:

私はgnuplotの起動コードがあると思います。助言がありますか?

答えて

1

答えは、私はそれから、対応する属性データを選択するために、データセットを再配置する方法を見つけ出す助け..ハックの試みです。 私はまた、さまざまなスパイダー軸の異なる範囲スケールを探していたので、@ georgeの提案に加えて、共通の[0:1]範囲に対する軸特有の正規化が問題を解決すると考えました。主な修正は、plotコマンドのusingフィールドに関連しています。

コードがかなり長いので、最適化できると確信しています。また、個々の軸ごとに軸の数(属性の数)、および異なる範囲(最小、最大)をユーザーに決定させるために、スクリプトまたは単純なCコードにマージすることもできます。

次の例は、2つの製品を比較する5つの属性の例です。ここにはplot result imageが表示されます。

set nokey 
set polar 
set angles degrees 
npoints = 5 
a1 = 360/npoints*1 
a2= 360/npoints*2 
a3= 360/npoints*3 
a4= 360/npoints*4 
a5= 360/npoints*5 
set grid polar 360. 
set size square 
set style data lines 
unset border 
set arrow nohead from 0,0 to first 1*cos(a1) , 1*sin(a1) 
set arrow nohead from 0,0 to first 1*cos(a2) , 1*sin(a2) 
set arrow nohead from 0,0 to first 1*cos(a3) , 1*sin(a3) 
set arrow nohead from 0,0 to first 1*cos(a4) , 1*sin(a4) 
set arrow nohead from 0,0 to first 1*cos(a5) , 1*sin(a5) 
a1_max = 10 
a2_max = 5 
a3_max = 100 
a4_max = 2020 
a5_max = 1 
a1_min = 0 
a2_min = 0 
a3_min = 50 
a4_min = 1980 
a5_min = 0 
set label "(0:10)" at cos(a1),sin(a1) center offset char 1,1 
set label "(0:5)" at cos(a2),sin(a2) center offset char -1,1 
set label "(50:100)" at cos(a3),sin(a3) center offset char -1,-1 
set label "(1980:2020)" at cos(a4),sin(a4) center offset char 0,-1 
set label "(0:1)" at cos(a5),sin(a5) center offset char 3,0 
set xrange [-1:1] 
set yrange [-1:1] 
unset xtics 
unset ytics 
set rrange [0:1] 
set rtics (""0,""0.25,""0.5,""0.75,""1) 

plot '-' using ($1==1?a1:($1==2?a2:($1==3?a3:($1==4?a4:($1==5?a5:$1))))):($1==1?(($2-a1_min)/(a1_max-a1_min)):($1==2?(($2-a2_min)/(a2_max-a2_min)):($1==3?(($2-a3_min)/(a3_max-a3_min)):($1==4?(($2-a4_min)/(a4_max-a4_min)):($1==5?(($2-a5_min)/(a5_max-a5_min)):$1))))) w l 
1 8 
2 3 
3 67 
4 2000 
5 0.2 
1 8 

plot '-' using ($1==1?a1:($1==2?a2:($1==3?a3:($1==4?a4:($1==5?a5:$1))))):($1==1?(($2-a1_min)/(a1_max-a1_min)):($1==2?(($2-a2_min)/(a2_max-a2_min)):($1==3?(($2-a3_min)/(a3_max-a3_min)):($1==4?(($2-a4_min)/(a4_max-a4_min)):($1==5?(($2-a5_min)/(a5_max-a5_min)):$1))))) w l 
1 6 
2 1.5 
3 85 
4 2010 
5 0.5 
1 6 
+0

これをチェックしてください[http://stackoverflow.com/questions/30649826/how-to-highlight-regions-of-plot-with-gnuplot/30684027#30684027]、星の数などを調整するのがずっと簡単です。 – Karl

3

はここ@georgeによって

set nokey 
set polar 
set grid polar 
set angles degrees 
set size square 
set style data lines 
a1=0 
a2=30 
a3=100 
a4=200 
a5=300 
set arrow nohead from 0,0 to first 10*cos(a1) , 10*sin(a1) 
set arrow nohead from 0,0 to first 10*cos(a2) , 10*sin(a2) 
set arrow nohead from 0,0 to first 10*cos(a3) , 10*sin(a3) 
set arrow nohead from 0,0 to first 10*cos(a4) , 10*sin(a4) 
set arrow nohead from 0,0 to first 10*cos(a5) , 10*sin(a5) 
set xrange [-10:10] 
set yrange [-10:10] 
plot '-' using ($1==1?a1:($1==2?a2:($1==3?a3:($1==4?a4:($1==5?a5:$1))))):2 lt 2 
1 4 
2 8 
3 6 
4 9 
5 5 
1 4 
+0

ありがとうございました。非常に高く評価。 plotコマンドのusingフィールドの論理関数は、私が問題を解決するのに大いに役立っています。 – CarloAlberto

関連する問題