Многострочная аннотация: проблема с num2str - PullRequest
2 голосов
/ 13 января 2020

Я ожидаю, что текст в текстовом поле будет отображаться как:

Simulation parameters: 
Number of loops = 500
Number of subcarriers = 12
Number of frames = 5,
MT = 2, MR = 2               % or MR x MT = 2 x 2

У меня есть код, написанный как:

txt = {'Simulation parameters: ','Number of loops = ',  num2str(loops_num),'Number of subcarriers = ',num2str(Nfft),,'Number of frames = ',num2str(K),'MT = ',num2str(MT),'MR = ',num2str(MR)};
text(4,0.5,txt,'FontSize',12)

И я получил:

results

1) Как это исправить? (Number of subcarriers = 100, et c должны быть в одной строке)

2) Как я могу использовать annotation в таком случае?

plot(1:10)
str = {'Simulation parameters: ','Number of loops = ',  num2str(loops_num),'Number of subcarriers = ',num2str(Nfft),'MT = ',num2str(MT),'MR = ',num2str(MR),'Number of frames = ',num2str(K)};
annotation( 'textbox', 'String',str, 'Color', 'black', ...
            'FontSize', 14, 'Units', 'normalized', 'EdgeColor', 'none', ...
            'Position', [0.8,0.5,0.2,0] )
set( gca, 'Position', [0.1, 0.1, 0.6, 0.8] )

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Таким образом, вы создаете массив ячеек массивов символов («строк»), который интерпретируется как отдельные строки при использовании в annotation. Таким образом, вы должны объединить те значения, которые вы хотите объединить в одну строку, используя [ ... ]. См. Следующий короткий пример:

plot(1:10);
str = { ...
  'Simulation parameters: ', ...
  ['Number of loops = ', num2str(500)], ...
  ['Number of subcarriers = ', num2str(12)], ...
  ['MT = ', num2str(2)], ...
  ['MR = ', num2str(2)], ...
  ['Number of frames = ', num2str(5)] ...
};
annotation('textbox', [0.3, 0.6, 0, 0], 'String', str, 'FitBoxToText', 'on');

Выход (Octave 5.1.0; код также протестирован в MATLAB Online) выглядит следующим образом:

Output

Надеюсь, это поможет!


РЕДАКТИРОВАТЬ: На вопрос, может ли аннотация быть перемещена за пределы рисунка. Возможно, НО включает в себя манипулирование свойствами фигуры. Это модифицированный код:

plot(1:10);
set(gca, 'Position', [0.1 0.1 0.6 0.8]);
str = { ...
  'Simulation parameters: ', ...
  ['Number of loops = ', num2str(500)], ...
  ['Number of subcarriers = ', num2str(12)], ...
  ['MT = ', num2str(2)], ...
  ['MR = ', num2str(2)], ...
  ['Number of frames = ', num2str(5)] ...
};
annotation('textbox', [0.75, 0.60, 0, 0], 'String', str, 'FitBoxToText', 'on');

Это обновленный вывод:

New output

1 голос
/ 13 января 2020

Matlab не знает, что вы хотите соединить текст и числа, так как они представляют собой отдельные строки, вам нужно объединить текст и числа вместе, чтобы Matlab знал, как их сложить, например:

txt = {'Simulation parameters: ',['Number of loops = ',  num2str(loops_num)],['Number of subcarriers = ',num2str(Nfft)],['Number of frames = ',num2str(K)],['MT = ',num2str(MT)],['MR = ',num2str(MR)]};
text(4,0.5,txt,'FontSize',12)

str = {'Simulation parameters: ',['Number of loops = ',  num2str(loops_num)],...
                                 ['Number of subcarriers = ',num2str(Nfft)],...
                                 ['MT = ',num2str(MT)],...
                                 ['MR = ',num2str(MR)],...
                                 ['Number of frames = ',num2str(K)]};
annotation( 'textbox', 'String',str, 'Color', 'black', ...
            'FontSize', 14, 'Units', 'normalized', 'EdgeColor', 'none', ...
            'Position', [0.8,0.5,0.2,0] )

Я комбинирую строки и переменные, используя

[ 'text = ' num2str(value)];

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

sprintf ( 'text = %f', value )

Его немного сложнее для чтения, но он более мощный и намного быстрее ( для одноразовых преобразований это не имеет значения, но полезно знать для дальнейшего использования)

См. документацию sprintf для получения дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...