Линии графика, заканчивающиеся квадратной скобкой

Моя цель: построить горизонтальную линию с квадратной скобкой (---]) конец этому.

Я обычно строю горизонтальные линии с

line([0,1],[2,2],'linestyle',':')

Я могу добавить обычные маркеры в конце

plot([0,1],[2,2],'o')

но не квадратная скобка.

Какие-либо предложения?

2 ответа

Решение

Вот ужасный хак, который добивается того, чего вы хотите:

XVALS = [0,1; 0,2; 0,3].';
YVALS = [3 3; 2,2; 1,1].';
INVIZ_OFFSET = 0.04;
figure(); 
% Step 1: Plot squares:
plot(XVALS(2,:), YVALS(2,:),'bs');
% Step 2: Plot invisible squares:
hold on;
plot(XVALS(2,:)-INVIZ_OFFSET, YVALS(2,:),'ws','MarkerFaceColor','w');
% Step 3: Plot lines
plot(XVALS, YVALS,':b');

% Play with limits:
axis image; xlim([0,5]); ylim([0,4]);

Результат:

введите описание изображения здесь

Идея состоит в том, что маркер "скобки" может быть получен с помощью скрытого квадратного маркера. Очевидно, что это не подходит для всех участков, но я думаю, что вы можете работать здесь...

Я думаю, что ваш самый простой вариант будет text команда:

l = line([0,1],[2,2],'linestyle',':');
text(l.XData(end),l.YData(end),']','VerticalAlignment','middle',...
    'FontSize',12,'FontWeight','bold','Color',l.Color)

Вы можете пойти дальше и добавить вращение:

x = 0:0.1:0.5*pi;
p = plot(x,cos(x)+1.5,'--r');
text(p.XData(end),p.YData(end),']','VerticalAlignment','middle',...
    'Rotation',atand(diff(p.YData(end-1:end))/diff(p.XData(end-1:end))),...
    'FontSize',12,'FontWeight','bold','Color',p.Color)

Вращение не идеальное, но это хорошее начало. Вот результат:

конец кронштейна


РЕДАКТИРОВАТЬ:

Для версии Matlab, выпущенной до 2014 года, вам необходимо использовать get функция:

l = line([0,1],[2,2],'linestyle',':');
x = get(l,'XData');
y = get(l,'YData');
text(x(end),y(end),']','VerticalAlignment','middle',...
      'FontSize',12,'FontWeight','bold','Color',l.Color)
Другие вопросы по тегам