7

異なる軸が独立したスケールを持つ Gnuplot を使用して、スパイダー (別名レーダー/スター) プロットを生成したいと考えています。OriginPro (商用) を使用してこのようなプロットを作成することはできますが、Gnuplot では均一なスケールのレーダー プロットしか設定できません。

(csv ファイル) データセットは次のようになります (最初の行は列ラベルです)。

# 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

私が探しているプロットはこれです: https://www.dropbox.com/s/uvqubzqvm6puhb8/spider.pdf - ご覧のとおり、各軸は異なる属性を表し、独自のスケールを持っています。

Gnuplot の開始コードは次のとおりだと思います。

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

しかし、私は進む方法がわかりません。助言がありますか?

4

4 に答える 4

3

これがハッキングの試みです..

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
于 2012-10-03T16:36:55.190 に答える
1

@georgeの回答は、対応する属性データを選択するために、データセットを再配置する方法を理解するのに役立ちました。@georgeの提案に加えて、スパイダー軸ごとに異なる範囲スケールも探していたので、共通の[0:1]範囲への軸固有の正規化で問題が解決すると思いました。主な変更はusing、コマンドのフィールドに関連していますplot

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

次の例は、2つの製品を比較する5つの属性の例です。プロット結果の画像を次に示します。

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
于 2012-10-14T18:26:47.730 に答える
0

次のレポは、均一なスケールのスパイダー チャートを示しています。https://github.com/orey/gnuplot-radarchart

あなたの特定のケースでは、私は次のようにします: -すべてのデータを正規化して図のスケールに収まるようにする関数を作成する -tge 標準スケールを非表示にする -軸に矢印を使用する -特定のスケールのラベル付きのポイントを追加し、それらをあなたのデータ関数。

インスピレーションはレポで見つけることができると思います。

于 2019-06-10T16:28:18.873 に答える