Линии графика, заканчивающиеся квадратной скобкой
Моя цель: построить горизонтальную линию с квадратной скобкой (---]
) конец этому.
Я обычно строю горизонтальные линии с
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)