Латексная многострочная скобка в аннотации Matlab

Я хочу аннотировать фигуру, сделанную с помощью Matlab, с помощью скобки, которая будет охватывать 3 строки. Пример приведен на рисунке по ссылке:

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

Мне удалось добавить вторую легенду. Но мне интересно, как я могу сделать это действительно чисто. Я пытаюсь сделать что-то вроде этого

str = '$S_n =$ $\left\{ \begin{tabular}{c} 0.5 MeV \\ 50 keV \\ 5 MeV \end{tabular}\right.$';
annotation('textbox',[0.325,0.175,0.1,0.1],'String',str,'Interpreter','latex','FitBoxToText','on','Linestyle','none')

но это дает такой результат:

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

Самые большие проблемы

  • Я должен настроить положение аннотации... Но это не такая уж большая проблема. Я могу потратить некоторое время и позиционировать его достаточно хорошо.
  • Кронштейн слишком большой... И у меня нет решения для этого. Как я мог это сделать?

Вопросы:

  1. Может ли кронштейн сжаться?
  2. Если нет, то можно ли это сделать другим способом?

person mwoua    schedule 18.04.2017    source источник


Ответы (1)


Лично я думаю, что кронштейн выглядит хорошо, беспокоясь о точном размере, это немного отвлекает.

Однако другим вариантом является добавление заголовка к легенде. Это позволит вам обозначать единицы/параметры, на которые ссылается каждая легенда, не загромождая каждую строку легенды. К сожалению, это не родная функциональность MATLAB, но мы можем заставить ее работать. Точная реализация зависит от версии Matlab.

КОДЕКС ДО 2014 ГОДА

function zz_LegendTitle(LegendHandle , TitleText, Fontsize)
% Workaround to Matlab 2014 thinking that legends don't need titles.
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if ~exist('Fontsize','var'); Fontsize = 10; end 
if ~exist('TitleText','var'); TitleText = 'example text'; end 


% Create an invisible axes at the same position as the legend
hLegendAxes = axes('Parent',LegendHandle.Parent, 'Units',LegendHandle.Units, 'Position',LegendHandle.Position, ...
                   'XTick',[] ,'YTick',[], 'Color','none', 'YColor','none', 'XColor','none', 'HandleVisibility','off', 'HitTest','off');

% Add the axes title (will appear directly above the legend box)
hTitle = title(hLegendAxes, TitleText,...
                'interpreter','latex',...
                'FontWeight','normal',...
                'FontSize',Fontsize);  % Default is bold-11, which is too large

% Link between some property values of the legend and the new axes
hLinks = linkprop([LegendHandle,hLegendAxes], {'Units', 'Position', 'Visible'});
% persist hLinks, otherwise they will stop working when they go out of scope
setappdata(hLegendAxes, 'listeners', hLinks);

% Add destruction event listener (no need to persist here - this is done by addlistener)
addlistener(LegendHandle, 'ObjectBeingDestroyed', @(h,e)delete(hLegendAxes));

Пример названия легенды

ПОСЛЕ 2014 КОДЕКС

    hLegend = legend(LegTxt,...
        'interpreter','latex','FontSize',LegFontSize,...
        'location','eastoutside');
    %resize to fix the legend-enforced size change
    set(ax(1),'Units',units,'position',IcePosVec);

%Attach a title to legend (here be dragons. Matlab 2015+ workaround)
     hlt = text('some text',...
    'Parent', hLegend.DecorationContainer, ...
    'String', 'Title', ...
    'HorizontalAlignment', 'center', ...
    'VerticalAlignment', 'bottom', ...
    'Position', [0.5, 1.05, 0], ...
    'Units', 'normalized');

PS. Надо отдать должное, я написал эти фрагменты кода около года назад, бессовестно украв превосходный Недокументированный веб-сайт Matlab.

person Mark_Anderson    schedule 18.04.2017