2016-05-17 3 views
1

Я ожидал, что это сработает, но мне не хватает того, что является «вектором ручек», из файла справки MATLAB.Легенда о разбросе3 в Matlab

ЛЕГЕНДА (M), где М представляет собой матрицу строка или массив ячеек строк и

ЛЕГЕНДА (H, M), где H представляет собой вектор рукоятками линий и пятен также работ.

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', но не вектор, а дескриптор скаляр рассеивать объект серии. В любом случае, см., Например, [этот пост] (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

Проблема с кодом является то, что h, выход scatter3, является одной ручкой. Это не массив ручек того же размера, что и ваши данные (это то, что вы подразумеваете при попытке установить массив ярлыков 40x1 на нем, игнорируя ненужную обертку handle). И это даже не массив из двух ручек, как можно было подумать (по одному на цвет). Поэтому вы не можете установить такую ​​легенду. Один из способов было бы построить все точки одного цвета в то время:

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

Смежные вопросы