2016-05-17 7 views
1

私はそれがうまくいくと思っていましたが、MATLABヘルプファイルから「ハンドルのベクトル」が欠けています。Matlabのスキャッタ3の伝説

Mが文字列の文字列行列またはセルアレイでLEGEND(M)、およびHはラインとパッチのハンドルのベクトルも 作品である

LEGEND(H、M)。

myone = ones(20,1); 
mytwo = ones(20,1)+1; 
rows = vertcat(myone,mytwo); 
mylabels = {'Alpha', 'Beta'}; 

figure 
grouplabels = mylabels(rows); 
h = scatter3(rand(40,1),rand(40,1),rand(40,1),20,rows,'filled'), ... 
    view(-33,22) 
legend(handle(h),grouplabels) 

xlabel('X') 
ylabel('Y') 
zlabel('Z') 

enter image description here

+0

'H'は 'handle'はなく、ベクトル、むしろ単一のスカラーへのハンドルそのものでありますスキャッタ系列オブジェクト。とにかく、例えば[this post](http://stackoverflow.com/questions/14006678/creating-legend-for-scatter3-plot-matlab)を見てください。 –

+0

残念ながら、これはMATLABの散布図の既知のバグであり、パッチをダウンロードする(または新しいバージョンまで待つ)必要があります。 http://www.mathworks.com/support/bugreports/1283854 – gariepy

+1

Mathworksでは、 'gscatter()'もオプションで、 'legend()'と正しく動作するように思われます。 – gariepy

答えて

1

あなたのコードの問題は、scatter3の出力は、単一のハンドルであるhということです。これは、データと同じサイズのハンドル配列ではありません(40x1のラベル配列を設定しようとすると、無関係のhandleラッパーは無視されます)。また、考えられたかもしれない2つのハンドルの配列(色ごとに1つ)もありません。このように伝説を立てることはできません。一つの方法は、周りに一度に一つの色のすべての点をプロットするために、次のようになります。

hFig = figure(); 
axh = axes('Parent', hFig); 
hold(axh, 'all'); 
h1 = scatter3(rand(20,1),rand(20,1),rand(20,1),20,'b','filled'); 
h2 = scatter3(rand(20,1),rand(20,1),rand(20,1),20,'r','filled'); 
view(axh, -33, 22); 
grid(axh, 'on'); 
legend(axh, [h1,h2], {'Alpha', 'Beta'}); 

enter image description here