Matlab进阶绘图
在这次的绘图练习中,我们需要考虑一次性将所有数据文件逐一读入,然后对每幅图图片进行放大处理。
参数设置
这里包括每幅图的标题,图例,读入文件的名称,等等
title_d = {'SMOP1','SMOP3','SMOP7','SMOP8'}; %指定每幅图的标题
figname = {'SECSO','SPS','SNSGAII','LERD','TS2SparseEA'}; %指定需要读入的文件名
led = {'S-ECSO','SPS','S-NSGA-II','LERD','TS2-SparseEA'}; %指定每幅图片显示的图例(这里每幅图片包括多个曲线)
Marker = ['s','*','s','d','v']; %指定图片里每条曲线的形状
idx = [1,3,7,8]; %指定子文件夹名称,配合后面代码使用
dimension = {'1000d','3000d'}; %指定子文件夹名称,配合后面代码使用
除此之外,还有一项关键内容,就是需要指定放大的区域。
xl = {[0.4 0.5], [0.4 0.5],[0.4 0.5],[0.4 0.5]}; %指定每幅图x轴放大的区域
yl = {[0.5 0.75], [0.5 0.75],[0.8 1.2], [0.8 1.5]}; %指定每幅图y轴放大的区域
至此我们完成大致准备工作
这里
数据导入
这里我们暂时只考虑一幅图片的数据导入,之后我会把完整代码(多文件数据读取)放出。这里我们的数据来源是Matlab中的Fig文件,当然如果你有直接数据,然后可以忽略这一操作步骤。
xdata = [];
ydata = [];
% 数据导入
for j = 1:5
%打开Fig, ['./MyPlot/服务器托管Objective_Value_Distribution/figs/TS2SparseEA/',dimension{d},'/SMOP',num2str(idx(i)),'/',figname{j},'.fig']表示把数据里的元素拼接成一个路径。
%invisible表示打开图片时,不显示图片,若该为visible则会打开此图片(建议不要开)
fig = openfig(['./MyPlot/Objective_Value_Distribution/figs/TS2SparseEA/',dimension{d},'/SMOP',num2str(idx(i)),'/',figname{j},'.fig'],'invisible');
lines = findobj(fig, 'type', 'line'); %找到fig里面所有的曲线
xdata = [xdata;get(lines, 'XData')]; %get(lines, 'XData'/'YData')表示获取所有曲线的横坐标和纵坐标
ydata = [ydata;get(lines, 'YData')];
end
绘制全图
%由于我们要在一个fig里面绘制两幅图(原图和放大图),因此需要两个坐标轴
figure;
% 创建全图的坐标轴,并指定其位置'Position'
ax1 = axes('Position', [0.15 0.15 0.75 0.75]);
%设置当前轴为全图的坐标轴
axes(ax1);
%曲线绘制,共有5条,box on表示显示图的框线,可以自己去掉看看变化。hold on表示不创建新的fig继续在当前fig上绘制其他曲线。
for j = 1:5
scatter(xdata(j, :), ydata(j, :),'Marker',Marker(j),'SizeData',60,LineWidth=1.5);
box on;
hold on;
end
title(title_d{i});
%设置当前图的字体等信息
set(gca,'FontName','Times New Roman','FontSize',17);
%设置xlabel和ylabel的文字,这里使用latex显示
xlabel('$f_1$', 'Interpreter', 'latex');
ylabel('$f_2$', 'Interpreter', 'latex');
%显示当前轴的图例
legend(led);
绘制放大图
有时候,由于原图里面各个曲线直接的距离很近,因此无法显出显著区别,在这种情况下,我们就需要对原图进行局部区域放大并绘制放大图以体现各曲线之间的细微区别。
%设置放大图的坐标轴
ax2 = axes('Position', [0.5 0.2 0.3 0.35]);
%将当前轴设置为放大轴
axes(ax2);
for j = 1: 5
%找到符合x轴放大区域和y轴放大区域的x坐标下标
zoom_in_idx = (xdata(j, :) >= xl{i}(1)) & (xdata(j, :) = yl{i}(1)) & (ydata(j, :)
最终效果展示
完整代码
clear;
clc;
% for TS2-SparseEA
title_d = {'SMOP1','SMOP3','SMOP7','SMOP8'};
figname = {'SECSO','SPS','SNSGAII','LERD','TS2SparseEA'};
led = {'S-ECSO','SPS','S-NSGA-II','LERD','TS2-SparseEA'};
Marker = ['s','*','s','d','v'];
idx = [1,3,7,8];
dimension = {'1000d','3000d'};
% for TSD-MOEA
% title_d = {'Sparse NN','Sparse SR','Sparse PO'};
% figname = {'MOEAPSL','SECSO','PMMOEA','TSDMOEA'};
% led = {'MOEA/PSL','S-ECSO','PM-MOEA','TSD-MOEA'};
% Marker = ['s','*','s','d'];
% color = {[214/255,232/255,121/255],[247/255,202/255,69/255],[82/255,198/255,160/255],[246/255,177/255,120/255]};
% idx = [1,3,7];
% dimension = {'3000d','RealWorld'};
% problem = {'NN','SR','PO'};
d = 2;
% zoom range
%self define
% TS2
xl = {[0.4 0.5], [0.4 0.5],[0.4 0.5],[0.4 0.5]};
yl = {[0.5 0.75], [0.5 0.75],[0.8 1.2], [0.8 1.5]};
% TSD
% xl = {[0 0.03], [0.05 0.1],[1.57e-7 8.33e-7]};
% yl = {[0.15 0.25], [0.78 0.82],[0.01 0.02]};
% label for each fig
% x_label = {'Complexity of neural network', 'Sparsity of reconstructed signal', 'Risk'};
% y_label = {'Training error', 'Loss of reconstructed signal', 'Return'};
for i = 1:4
xdata = [];
ydata = [];
% 数据导入
for j = 1:5
fig = openfig(['./MyPlot/Objective_Value_Distribution/figs/TS2SparseEA/',dimension{d},'/SMOP',num2str(idx(i)),'/',figname{j},'.fig'],'invisible');
% TSD
% fig = openfig(['./MyPlot//Objective_Value_Distribution/figs/TSDMOEA/',dimension{d},'/',problem{i},'/',figname{j},'.fig'],'invisible');
lines = findobj(fig, 'type', 'line');
xdata = [xdata;get(lines, 'XData')];
ydata = [ydata;get(lines服务器托管, 'YData')];
end
% 绘制全图
figure;
ax1 = axes('Position', [0.15 0.15 0.75 0.75]);
axes(ax1);
for j = 1:5
scatter(xdata(j, :), ydata(j, :),'Marker',Marker(j),'SizeData',60,LineWidth=1.5);
box on;
hold on;
end
title(title_d{i});
set(gca,'FontName','Times New Roman','FontSize',17);
xlabel('$f_1$', 'Interpreter', 'latex');
ylabel('$f_2$', 'Interpreter', 'latex');
% TSD
% xlabel(x_label{i});
% ylabel(y_label{i});
legend(led);
% 绘制放大图
ax2 = axes('Position', [0.5 0.2 0.3 0.35]);
axes(ax2);
% 设置要放大的x轴范围
% 找到范围内的数据点
for j = 1: 5
zoom_in_idx = (xdata(j, :) >= xl{i}(1)) & (xdata(j, :) = yl{i}(1)) & (ydata(j, :)
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
Sparse稀疏检索介绍 在处理大规模文本数据时,我们经常会遇到一些挑战,比如如何有效地表示和检索文档,当前主要有两个主要方法,传统的文本BM25检索,以及将文档映射到向量空间的向量检索。 BM25效果是有上限的,但是文本检索在一些场景仍具备较好的鲁棒性和可解…