0

放射状に品質の数値評価を表す matlab を使用してプロットを作成したいと思います。

私が見つけた最良の方法は、正しく機能していないようです。次のコードを実行します。

theta = (0 : (360/11) : 360)*pi/180;
r = 0 : 2 : 20 ;
[TH,R] = meshgrid(theta,r);
[X,Y] = pol2cart(TH,R);
Z = meshgrid(Data);
surf(X,Y,Z);

Dataは、11 個の数値を含むデータのベクトルです。データセットの例は次のとおりです。

Data = 0.884, 0.882, 0.879, 0.880, 0.8776, 0.871, 0.8587, 0.829, 0.811, 0.803, 0.780 

surfここの出力は次のとおりです。

不適切なサーフ プロット

このタイプの画像のより洗練されたバージョンを作成したいと思います。

ほとんど正しい出力

次のコードで生成しました。

for theta = 0 : pi/100 : pi;  
    v = [InterpolatedImageHeight;LengthVector];
    x_center = InterpolatedImageHeight((HorizontalRes+1)/2);
    y_center = 0; %InterpolatedImageHeight((HorizontalRes+1)/2);
    center = repmat([x_center; y_center], 1, length(InterpolatedImageHeight));
    R = [cos(theta) -sin(theta); sin(theta) cos(theta)];
    vo = R*(v - center) + center;
    x_rotated = vo(1,:);
    y_rotated = vo(2,:);
    scatter(x_rotated,y_rotated,DotSize,InterpolatedData,'filled'); %x,y,area,color,properties
end

これに関する問題は、私が本質的に使用している散布図でありplot(r,Data)、多くのコピーをプロットし、ドットサイズを大きくしていることです。グラフィック自体には多くの継ぎ目があり、これには膨大な量のメモリが必要であり、非常に高速に実行され、最小限のメモリしかsurf必要としない場所では時間がかかります。mesh

色の可変入力を使用して同心円を作成するにはどうすればよいですか?

4

2 に答える 2

1

あなたの質問には2つの完全に異なるプロットがあります。最初のものは、原点から円の外側に向かう光線としてデータを表します。データポイントは反時計回りに配置されます。これの洗練されたバージョンは、次のように実現できます。

Data = [0.884, 0.882, 0.879, 0.880, 0.8776, 0.871,...
        0.8587, 0.829, 0.811, 0.803, 0.780]; 

theta = linspace(0,2*pi,length(Data));
r = linspace(0,20,length(Data));
[TH,R] = meshgrid(theta,r);

Z = meshgrid(Data);
[X,Y,Z] = pol2cart(TH,R,Z);

surf(X,Y,Z);
view(2);
shading interp

linspace以前は を生成thetar、常に の長さと一致していたことに注意してくださいDataZも通過しpol2cartます。shading interp次に、パッチ間の線を削除し、色を補間するために使用できます。2Dプロットと同じようにview(2)パースペクティブを設定できます。

結果は次のとおりです。

結果1


2 番目の例のような結果を得るのは比較的簡単です。そこでは、データポイントは原点の周りの同心円を表し、原点から外側に向かって配置されます。Zしたがって、次の行を使用してメッシュ グリッドを転置するだけです。

Z = meshgrid(Data)';

これは結果です:

結果2

于 2015-07-10T20:27:08.777 に答える