2013-09-10 10 views
6

Я хочу, чтобы добавить дополнительную информацию на рисунке в MATLAB, как это:Как добавить дополнительную информацию в легенду фигуры?

enter image description here

Возможно ли это? (Конечно, я хочу, чтобы это было красивее)

+0

Вы можете использовать LaTeX в легенде этикетками, это будет достаточно? –

+0

Да, не могли бы вы дать мне команды LaTeX для этой цели? – nazemian

+0

Итак, вы хотите возглавить таблицу рядом с вашей легендой? –

ответ

13

Я собрал что-то разумно общий, см. Ниже.

Я обобщать это немного больше и разместить его в файлообменной, я думаю, что это довольно хороший инструмент, чтобы иметь вокруг :)

Я намерен

  • автоматически регулировать размер таблицы в приспосабливать его содержание
  • делает их подходящим для любой легенды размещения
  • пара стола и легенды вместе при перемещении их с помощью мыши
  • сделать заголовок факультативные
  • поддержки
  • различные типы входных

Но на данный момент:

% Example input 

plot(1,1,'r.', 1.1,1.1', 'b.', 1.2,1.2, 'k.'); 
legendHandle = legend('plot 1', 'plot 2 with longer title', 'plot 3'); 

tableHead = {'\theta_0' '\phi' 'df/dx'}; 
tableContent = rand(3); 




% Extract information 
legendPosition = get(legendHandle, 'position'); 
children = get(legendHandle, 'children'); 
labels = children(strcmp(get(children, 'type'), 'text')); 


% Basic error traps 
if size(tableContent,1) ~= numel(labels) 
    error('LegendTable:dimension_mismatch',... 
     'Each legend entry must have a corresponding row in the table.') 
end 

if size(tableHead,2) ~= size(tableContent,2) 
    error('LegendTable:dimension_mismatch',... 
     'Table header dimensions are inconsistent with table data.'); 
end 

% Convert header & content to cell-array when necessary 
if isnumeric(tableContent) 
    tableContent = cellfun(@num2str, ... 
     num2cell(tableContent), 'UniformOutput', false); 
end 
if isnumeric(tableHead) 
    tableHead = cellfun(@num2str, ... 
     num2cell(tableHead), 'UniformOutput', false); 
end 

% Proper tick locations for the table 
xticks = linspace(0, 1, numel(tableHead)+1); 
yticks = linspace(0, 1, numel(labels)+2); 

% Text positions are in the centers of the table cells 
txt_xPositions = xticks(1:end-1) + (xticks(2)-xticks(1))/2; 
txt_yPositions = fliplr(yticks(1:end-1) + (yticks(2)-yticks(1))/2); 

% Derive correct table position 
headerHeight = legendPosition(4)/numel(labels); 
tablePosition = legendPosition + [0 -headerHeight 0 headerHeight]; 

% Shift position of original legend 
set(legendHandle, 'position', legendPosition + [-tablePosition(3) -headerHeight 0 0]) 

% Create table 
table = axes(...  
    'position', tablePosition,... 
    'xtick', xticks,... 
    'ytick', yticks,... 
    'xticklabel', [],... 
    'yticklabel', [],...  
    'gridlinestyle', '-',... 
    'box', 'on',... 
    'tag', 'LegendTable'); 
grid on 


% Print table header & table entries 
kk = 1; 
tableTexts = zeros(numel(tableHead)+numel(tableContent),1); 
for ii = 1:numel(txt_xPositions) 

    % Column header 
    tableTexts(kk) = text(txt_xPositions(ii), txt_yPositions(1), tableHead{ii},... 
      'parent', table,... 
      'HorizontalAlignment', 'center'); 
    kk = kk + 1; 

    % Column content 
    for jj = 1:numel(txt_yPositions)-1 
     tableTexts(kk) = text(... 
      txt_xPositions(ii), txt_yPositions(jj+1), tableContent{jj,ii},... 
      'parent', table,... 
      'HorizontalAlignment', 'center'); 
     kk = kk + 1; 
    end 
end 

Результат:

enter image description here

+0

приятно, очень приятно :) –

0

Вы можете использовать функцию num2str для передачи параметров легенде.

легенда ([ 'красный' num2str (param1_red) '' num2str (param2_red)], ...)

5

Ну, возможно, немного излишеством:

Вы можете использовать uitable , вот так

%define your data: 
dat = {'  green', 1, 2;... 
    '  blue', 2,3.1;... 
    '  yellow', 3, 4.8;} 
columnname = {' ', 'Param1', 'Param2'}; 
columnformat = {'char', 'numeric', 'numeric'}; 
t = uitable('Units','normalized','Position',... 
     [0.05 0.05 0.755 0.87], 'Data', dat,... 
     'ColumnName', columnname,... 
     'ColumnFormat', columnformat,... 
     'RowName',[], 'Parent', gcf); 

вам просто нужно знать ручку, если gcf (получить текущую цифру) не работает! вы можете изменить размер и сделать все, что хотите, чтобы оно выглядело хорошо ...

+0

Спасибо. Я проверил ваш код, но это было не то, что я хочу. – nazemian

Смежные вопросы