РЕДАКТИРОВАТЬ Эрика
Мой ответ идет ниже ответа zelanix, потому что мой основан на нем.
Оригинальный ответ
Вполне работоспособным решением может быть следующее:
x = rand(10, 1);
y = rand(10, 1);
figure;
text(x,y,num2str(transpose(1:numel(x))),'HorizontalAlignment','center')
% Create dummy legend entries, with white symbols.
hold on;
plot(0, 0, 'o', 'color', [1 1 1], 'visible', 'off');
plot(0, 0, 'o', 'color', [1 1 1], 'visible', 'off');
hold off;
% Create legend with placeholder entries.
[h_leg, icons] = legend('foo', 'bar');
% Create new (invisible) axes on top of the legend so that we can draw
% text on top.
ax2 = axes('position', get(h_leg, 'position'));
set(ax2, 'Color', 'none', 'Box', 'off')
set(ax2, 'xtick', [], 'ytick', []);
% Draw the numbers on the legend, positioned as per the original markers.
text(get(icons(4), 'XData'), get(icons(4), 'YData'), '1', 'HorizontalAlignment', 'center')
text(get(icons(6), 'XData'), get(icons(6), 'YData'), '2', 'HorizontalAlignment', 'center')
axes(ax1);
Выход:
Хитрость заключается в том, что новые оси создаются точно в том же месте, что и легенда, а координаты элементов icons
имеют нормализованные координаты, которые теперь можно использовать непосредственно внутри новых осей. Конечно, теперь вы можете использовать любой размер / цвет шрифта / все, что вам нужно.
Недостатком является то, что это следует вызывать только после заполнения и позиционирования вашей легенды. Перемещение легенды или добавление записей не приведет к обновлению пользовательских маркеров.
Эрик ответ
Основываясь на ответе zelanix выше. Это незавершенный ответ, я пытаюсь сделать из этого довольно гибкую функцию. В настоящее время это просто сценарий, который вам нужно адаптировать к вашей ситуации.
% plot some lines and some text numbers
f = figure;
plot([0 1],[0 1],[0 1],[1 0])
x = rand(25,1);
y = rand(25,1);
for n = 1:numel(x)
text(x(n),y(n),num2str(n), ...
'HorizontalAlignment','center','color',[1 0 0])
end
hold on
% scatter(x,y) % used to test the number positions
scatter(x,y,'Visible','off') % moves the legend location to best position
% create the dummy legend using some dummy plots
plot(0,0,'o','Visible','off')
[l,i] = legend('some line','some other line','some numbers','location','best');
l.Visible = 'off';
% create empty axes to mimick legend
oa = gca; % the original current axes handle
a = axes;
axis manual
a.Box = 'on';
a.XTick = [];
a.YTick = [];
% copy the legend's properties and contents to the new axes
a.Units = l.Units; % just in case
a.Position = l.Position;
i = copyobj(i,a);
% replace the marker with a red 'n'
s = findobj(i,'string','some numbers');
% m = findobj(i(i~=s),'-property','YData','marker','o');
m = findobj(i(i~=s),'-property','YData');
sy = s.Position(2);
if numel(m)>1
dy = abs(m(1).YData - sy);
for k = 2:numel(m)
h = m(k);
dy2 = abs(h.YData - sy);
if dy2<dy
kbest = k;
dy = dy2;
end
end
m = m(kbest);
end
m.Visible = 'off';
mx = m.XData;
text(mx,sy,'n','HorizontalAlignment','center','color',[1 0 0])
% reset current axes to main axes
f.CurrentAxes = oa;
Результат:
person
zelanix
schedule
10.11.2015
annotation
? - person Steve   schedule 10.11.20151: foo
,2: bar
. Таким же образом можно добавить заполнитель в легенду, а затем сымитировать его, добавив текст в качестве аннотации сверху (хотя легенда может его скрывать). - person zelanix   schedule 10.11.2015icons
, выводаlegend
в вопросе). Затем я мог бы изменить положение текста легенды (также вicons
). Затем текстовая строка может стать «n␣␣␣(с пробелами, необходимыми для нормального вида)␣␣␣текст записи легенды». Тогда это будет весь черный текст, что нормально для черных чисел. Однако, если бы я хотел добавить еще один разброс чисел другого цвета, буква «n» не могла бы быть этого цвета. - person Erik   schedule 10.11.2015icons
содержит дескрипторы, которые в конечном итоге все имеют саму легенду в качестве родителя... Технически для дочернего элемента невозможно иметь родителя, но родитель не может иметь дочернего элемента! - person Erik   schedule 10.11.2015icons
действительно показывают родителя как легенду, но они должны быть каким-то особенным. Я опубликовал возможное решение. Ваша идея сдвинуть текст влево и заполнить его тоже сработает, хотя и с упомянутыми вами оговорками. - person zelanix   schedule 10.11.2015