2016-08-21 10 views
3

と曲線上の領域を埋める: desired figure私はこのようになりますMathWorks社のMATLABの図を作成しようとしている多くの色(MATLAB、サーフ)

私がでそうやっている:(I)を割り当てる値ポイント(ii)サーフをプロットし、(iii)第3の軸が見えないように視点を変更することを特徴とする方法。ここでは、コードは次のとおりです。

x = linspace(0, 1, 10); 
    y = linspace(0, 1, 10); 
    z = linspace(0, 1, 10); 
    z = repmat(z, 10, 1); 
    z = flipud(triu(z)); 
    z(z==0) = nan; 

    hold off 
    surf(x, y, z, 'linestyle', 'none') 
    colormap([linspace(0.39, 1, 20)',linspace(0.58, 0.25, 20)', linspace(0.93, 0.25, 20)']); 
    colorbar 
    xlim([x(1) x(end)]) 
    shading interp 
    view([90 -90]) 
    hold on 
    plot(x, 1-y, 'linewidth', 2) 

私は、次の図を得る:matlab figure I get

あなたが見ることができるように、そこに私は、同様の色になりたい行以上の空白がたくさん。残念ながら、ポイントの実際の値を計算するには(上記の例とは異なり)時間がかかりますので、グリッドポイントを追加することはできません。

これらの空白にもmatlabに色を描く方法はありますか?

ありがとうございます!

答えて

1

patch関数を使用して塗りつぶしポリゴンを作成できます。

vert = [0 1;1 1;1 0]; % x and y vertex coordinates 
fac = [1 2 3]; % vertices to connect to make trinagle 
fvc = [1 0 0; 1 1 1; 0 0 1]; 
patch('Faces',fac,'Vertices',vert,'FaceVertexCData',fvc,'FaceColor','interp'); 

結果は近いです::
enter image description here


Iは、所望の数字に近づけることに成功しました:

close all 

x = linspace(0, 1, 10); 
y = linspace(0, 1, 10); 

%colorbar 
xlim([x(1) x(end)]) 

%Fill rectangle. 
vert = [0 0; 1 0; 1 1; 0 1]; % x and y vertex coordinates 
fac = [1 2 3 4]; % vertices to connect to make squares 
%patch('Faces',fac,'Vertices',vert,'FaceColor','red') 
fvc = [1 0 0; 0.6 0.7 1; 0.6 0.7 1; 1 0 0]; %Color of vertices (selected to be close to example image). 
patch('Faces',fac,'Vertices',vert,'FaceVertexCData',fvc,'FaceColor','interp') 
hold on 

%Fill lower trinagle with white color. 
vert = [0 0;0 1;1 0]; % x and y vertex coordinates 
fac = [1 2 3]; % vertices to connect to make trinagle 
fvc = [1 1 1; 1, 1, 1; 1, 1, 1]; %White color 
patch('Faces',fac,'Vertices',vert,'FaceVertexCData',fvc,'FaceColor','interp'); 

plot(x, 1-y, 'linewidth', 2) 

set(gca,'Xtick',[],'Ytick',[]); %Remove tick marks 

は、次のコードを試してみてください http://www.mathworks.com/help/matlab/ref/patch.html

を参照してください。

結果:
enter image description here

1

ありがとうRotem!私はパッチ機能を認識しておらず、確かに問題を解決しました! 私が達成しようとしている実際の人物の色は線形ではないので、すべての空の三角形に対してパッチを使用しました。図は、達成

x = linspace(0, 1, 10); 
y = linspace(0, 1, 10); 
z = linspace(0, 1, 10); 
z = repmat(z, 10, 1)+0.1; 
z = flipud(triu(z)); 
z(z==0) = nan; 
z = z-0.1; 

hold off 
surf(x, y, z, 'linestyle', 'none') 
colormap([linspace(0.39, 1, 20)',linspace(0.58, 0.25, 20)', linspace(0.93, 0.25, 20)']); 
colorbar 
xlim([x(1) x(end)]) 
shading interp 
view([90 -90]) 
hold on 

patch_cor_y = kron((length(y):-1:1)', ones(3, 1)); 
patch_cor_x = kron((1:length(x))', ones(3, 1)); 
patch_cor = [y(patch_cor_y(2:end-2))', x(patch_cor_x(3:end-1))']; 
patch_path = reshape(1:length(patch_cor),3, length(patch_cor)/3)'; 

patch_col = z(sub2ind(size(z), patch_cor_x(3:end-1), patch_cor_y(2:end-2))); 

patch('Faces',patch_path,'Vertices',patch_cor,'FaceVertexCData',patch_col,'FaceColor','interp', 'EdgeColor', 'none'); 

plot(x, 1-y, 'linewidth', 2) 

:ここで私は簡単な例で使用する調整コードが(再び、これは単にもう少し一般的なだけ曲線上の領域に非線形色を有することができるようにされている)であるfigure

関連する問題