简体   繁体   中英

How to add an independent text in MATLAB plot legend

I need an additional text in the legend that is not related with graphical data together with the legend captions. Something like this (it was made in OriginLab):

在此输入图像描述 Following to this link Add custom legend without any relation to the graph I can add some text using plot(NaN,NaN,'display','add info here2', 'linestyle', 'none') . But there is an indent in this text:

在此输入图像描述

How to avoid this indent? And is there a more elegant method to add the text that is not associated with the legend together with the legend captions?

The legend function will return as its second output argument handles for all of the components that make up the symbols and text in the legend. You can therefore plot "dummy" lines as placeholders in the legend, reorder the handles when creating the legend to put the text where you want it, and modify the legend objects accordingly. Here's an example:

x = linspace(0, 2*pi, 100);
hl = plot(x, [sin(x); cos(x); tan(x); nan(size(x))].');          % Add a line of NaNs
axis([0 2*pi -4 4]);
[~, objH] = legend(hl([1 2 4 3]), 'sin', 'cos', 'junk', 'tan');  % Reorder handles
set(findobj(objH, 'Tag', 'junk'), 'Vis', 'off');           % Make "junk" lines invisible
pos = get(objH(3), 'Pos');                                 % Get text box position
set(objH(3), 'Pos', [0.1 pos(2:3)], 'String', 'also...');  % Stretch box and change text

在此输入图像描述

You can use annotations. It's not perfect, but with few adjustments you'll get what you want. Here's an example:

% somthing to plot:
x = [0:0.1:5; 5:0.1:10].';
y = sin(x);
% plot the real data:
plot(x,y);
hold on
% make some space in the legend:
Spacing_lines = 3;
h = plot(nan(size(x,1),Spacing_lines));
hold off
set(h,{'Color'},{'w'}); % clear the dummy lines
% place the legend:
hl = legend([{'lable1','lable2'} repmat({''},1,Spacing_lines)]);
% add your text:
annotation('textbox',hl.Position,'String',{'Some info';'in 2 lines'},...
    'VerticalAlignment','Bottom','Edgecolor','none');

And from this you get:

txt 2传奇

You can just add any text to any point of plot in this way:

txt1 = 'some information';
text(x1,y1,txt1)

where x1, y1 - coordinates.

在此输入图像描述

By the way function text function has a lot of different properties (colors, font size, alignment etc.).

我认为最简单的方法是创建一些虚拟函数,绘制它但设置color =“none” - 这样它只会出现在图例中(如果那是你想要它的地方)。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM