web-dev-qa-db-ja.com

matlab-plotでサーフを1つの色(グラデーションなし)に設定するにはどうすればよいですか?

私のデータセットは3つのベクトル(x、y、z)で構成されています。これらの値を、plot3(x、y、z)を使用した3dプロットのドットとしてプロットします。これは問題ありません。同じプロットに平面を表示したいと思います。このプロットのデータを取得するには、xとyの線形回帰を使用して新しいzを取得します。

これはそれがどのように見えるかです:

alt text
(ソース: bildr.no

サーフを1色(ライトブルーやグレーなど)だけで塗りつぶし、不透明度を設定してシースルーにします。これどうやってするの?

17
atsjoo

1つの色と特定の透明度値を持つサーフェスを作成する最も簡単な方法は、サーフェスオブジェクトの「FaceColor」プロパティと「FaceAlpha」プロパティを設定することです。

hSurface = surf(...your arguments to create the surface object...);
set(hSurface,'FaceColor',[1 0 0],'FaceAlpha',0.5);

この例では、表面の色を赤に設定し、透明度を0.5に設定します。 Edgeプロパティを設定することもできます(「EdgeColor」および「EdgeAlpha」を使用)。

26
gnovice

Gnoviceからの回答を完了するには、set(hsurface...)の追加の要素が必要になる場合があります(Matlab R2010b 64):

hSurface = surf(...your arguments to create the surface object...);
set(hSurface, 'FaceColor',[1 0 0], 'FaceAlpha',0.5, 'EdgeAlpha', 0);

プロットされたサーフェスのポイントツーポイントエッジを非表示にする

あなたが何をしたいのか私にははっきりしません。あなたがサーフィンのために1つの色を言うとき、あなたはちょうど1つの色を意味しますか、それともあなたが灰色の色合いが欲しいという意味ですか?

さまざまなことを行うコードを次に示します。使用する行を選択できます。

x = Rand(1,20);
y = Rand(1,20);
z = Rand(1,20);

[X,Y] = meshgrid(linspace(0,1,10),linspace(0,1,10));
Z = Rand(10)*0.1;

clf
plot3(x,y,z,'.');
hold on
h = surf(X,Y,Z)
hold off

%% This will change the color
colormap(copper)
%% This will remove colordata
set(h, 'cdata',zeros(10))
%% This will make transparent
alpha(0.5)
4
MatlabDoug

@ matlabDoug には必要なものが揃っていると思います。プロパティcdataは、カラーマップを適用するカラーデータを保持します。サーフェスデータと同じサイズの配列に設定し、その配列の各要素の値を同じにすると、サーフェスが1色になります。デフォルトのカラーマップでは、cdataのすべてをゼロに設定すると表面が青になり、すべてを1に設定すると表面が赤になります。次に、アルファを試して透明にします。

1
Scottie T