我正在尝试找到一个更好的\更简洁的方法来添加许多“文本块”(我称之为“文本块”,一些文本有多行)到一个数字。参见下图:
我用来生成这个数字的代码是:
x=-4*pi:pi/20:4*pi;
y=cos(x);
% generate positions for the text blocks
[ypos,xpos]=find(ismember(y,max(y))); % finds multiple maxima
% generate random data to be presented
info1=rand(1,numel(xpos)); info2=rand(1,numel(xpos)); info3=rand(1,numel(xpos));
plot(x,y);
ylim([-1.1 1.4])
% generate the "text blocks"
text(x(xpos),ypos+0.3,strcat('A_{',num2str((1:numel(xpos))'),'}=',num2str(info1','%0.1f')),'FontSize',8);
text(x(xpos),ypos+0.2,strcat('B_{',num2str((1:numel(xpos))'),'}=',num2str(info2','%0.1f')),'FontSize',8);
text(x(xpos),ypos+0.1,strcat('C_{',num2str((1:numel(xpos))'),'}=',num2str(info3','%0.1f')),'FontSize',8);
%...
%... etc
我知道可以使用单元格数组添加多行文本字符串,方法是将字符串变量定义为每个单元格一行的单元格数组。例如:
text(x,y,{'line 1' ; 'line 2' ; 'line 3'});
但是,这也需要每个文本块一行代码,因此它不能解决多文本块的情况......
我的问题是: 有没有办法将这些文本块添加到一行或更一般的意义上,比如我是否有n个文本块,每个文本块都有一些可变数量的文本行?
答案 0 :(得分:1)
怎么样?
pos = num2cell(linspace(.3,.1,3));
lett = num2cell(linspace('A','C',3));
your_text_f_handle = @(ps,lt) ...
text(x(xpos),ypos+ps,strcat(lt, ...
'_{',num2str((1:numel(xpos))'),'}=',... % //REM: old info_i are here
num2str(rand(1,numel(xpos))','%0.1f')),'FontSize',8);
cellfun(your_text_f_handle ,pos,lett);
它提供完全相同的输出(经过测试),并且可以轻松扩展。