在进行绘图时,我们可能需要加入下划线等特殊符号,而这些特殊符号在matlab中有时会起着控制显示格式的作用,不注意的话可能有一些问题。例如,下图所示,箭头所指的两个地方由于使用了下划线符号,导致无法显示。
其实,这个问题的解决方法很简单,就是利用strrep,将下划线加上反斜杠转义即可。
data={0,'NSGAIII','EDF_PS',156.14
1,'NSGAIII','EDF_PS',127.67
2,'NSGAIII','EDF_PS',143.71
3,'NSGAIII','EDF_PS',136.53
4,'NSGAIII','EDF_PS',127.59
5,'NSGAIII','EDF_PS',127.69
6,'NSGAIII','EDF_PS',131.12
7,'NSGAIII','EDF_PS',124.77
8,'NSGAIII','EDF_PS',127.09
9,'NSGAIII','EDF_PS',126.69
10,'NSGAIII','EDF_PS',126.24
11,'NSGAIII','EDF_PS',123.68
12,'NSGAIII','EDF_PS',127.42
13,'NSGAIII','EDF_PS',122.75
14,'NSGAIII','EDF_PS',124.47
15,'NSGAIII','EDF_PS',127.74
16,'NSGAIII','EDF_PS',124.33
17,'NSGAIII','EDF_PS',128.34
18,'NSGAIII','EDF_PS',124.29
19,'NSGAIII','EDF_PS',122.33
20,'NSGAIII','EDF_PS',126.0
21,'NSGAIII','EDF_PS',124.0
22,'NSGAIII','EDF_PS',130.69
23,'NSGAIII','EDF_PS',125.41
24,'NSGAIII','EDF_PS',123.56
25,'NSGAIII','EDF_PS',125.07
26,'NSGAIII','EDF_PS',129.71
27,'NSGAIII','EDF_PS',126.23
28,'NSGAIII','EDF_PS',125.33
29,'NSGAIII','EDF_PS',125.26
0,'NSGAIII','EDF_TSS',117.34
1,'NSGAIII','EDF_TSS',115.59
2,'NSGAIII','EDF_TSS',122.14
3,'NSGAIII','EDF_TSS',118.21
4,'NSGAIII','EDF_TSS',155.0
5,'NSGAIII','EDF_TSS',142.47
6,'NSGAIII','EDF_TSS',155.83
7,'NSGAIII','EDF_TSS',149.96
8,'NSGAIII','EDF_TSS',150.1
9,'NSGAIII','EDF_TSS',148.39
10,'NSGAIII','EDF_TSS',160.16
11,'NSGAIII','EDF_TSS',151.07
12,'NSGAIII','EDF_TSS',151.01
13,'NSGAIII','EDF_TSS',142.25
14,'NSGAIII','EDF_TSS',141.33
15,'NSGAIII','EDF_TSS',144.0
16,'NSGAIII','EDF_TSS',147.21
17,'NSGAIII','EDF_TSS',147.99
18,'NSGAIII','EDF_TSS',147.21
19,'NSGAIII','EDF_TSS',144.56
20,'NSGAIII','EDF_TSS',145.81
21,'NSGAIII','EDF_TSS',145.33
22,'NSGAIII','EDF_TSS',143.51
23,'NSGAIII','EDF_TSS',144.51
24,'NSGAIII','EDF_TSS',145.62
25,'NSGAIII','EDF_TSS',150.69
26,'NSGAIII','EDF_TSS',143.45
27,'NSGAIII','EDF_TSS',146.77
28,'NSGAIII','EDF_TSS',143.0
29,'NSGAIII','EDF_TSS',144.44
0,'NSGAIII','BT',216.53
1,'NSGAIII','BT',210.84
2,'NSGAIII','BT',234.24
3,'NSGAIII','BT',209.2
4,'NSGAIII','BT',209.72
5,'NSGAIII','BT',220.63
6,'NSGAIII','BT',198.12
7,'NSGAIII','BT',198.72
8,'NSGAIII','BT',205.23
9,'NSGAIII','BT',219.32
10,'NSGAIII','BT',214.1
11,'NSGAIII','BT',203.41
12,'NSGAIII','BT',229.26
13,'NSGAIII','BT',221.21
14,'NSGAIII','BT',241.74
15,'NSGAIII','BT',198.37
16,'NSGAIII','BT',197.92
17,'NSGAIII','BT',212.08
18,'NSGAIII','BT',191.1
19,'NSGAIII','BT',285.05
20,'NSGAIII','BT',261.04
21,'NSGAIII','BT',212.12
22,'NSGAIII','BT',217.44
23,'NSGAIII','BT',214.22
24,'NSGAIII','BT',213.57
25,'NSGAIII','BT',184.27
26,'NSGAIII','BT',219.29
27,'NSGAIII','BT',204.26
28,'NSGAIII','BT',181.37
29,'NSGAIII','BT',193.91
};
algorithms = unique(data(:,2));
problems = unique(data(:,3));
% 按照问题分组绘图
newData = [];
for j=1:length(problems)
problem = problems{j};
newData = [newData cell2mat(tmp(strcmp({tmp{:,3}},problem),4))];
end
boxplot(newData);
xlabel('$$algorithm$$','Interpreter','latex');
ylabel('$$time$$','Interpreter','latex');
set(gca,'TickLabelInterpreter','latex');
%xticklabels({'fdsafadfasfaer','ffafa','fa'});
% 'BT' 'EDF_PS' 'EDF_TSS'
%set(gca, 'XTick', 1:length(problems), 'XTickLabel', cellstr(problems'),'FontSize',14);
% 'BT' 'EDF\_PS' 'EDF\_TSS'
set(gca, 'XTick', 1:length(problems), 'XTickLabel', strrep(cellstr(problems'),'_','\_'),'FontSize',14);