Рисунок, созданный из изменений контура, должен быть в растровом формате, когда число строк и столбцов превышает некоторый порог - PullRequest
0 голосов
/ 12 июня 2018

Матрица двумерных данных ( данные , 100 строк по 100 столбцов) была построена с использованием функции 'contour' в matlab, и рисунок был сохранен как файл * .emf.Ожидается, что когда я вставлю фигуру ЭДС в файл MS Word, фигура будет векторной графикой.Но когда я улучшил разрешение данных, т.е. использовал imresize в matlab для масштабирования матрицы данных с коэффициентом 2, и сделал то же самое, что и раньше (построил график, сохранил как emf и вставил его в слово), рисунок изменился на растровый формат,Есть ли какие-либо настройки в Matlab, которые могут улучшить порог, который сохраняет векторную графику?Используемый код выглядит следующим образом:

path = 'C:\Users\Administrator\Desktop\';
data = importdata([path, 'lsa2.txt'], ' ', 6);
cdata = data.data;

% scale = 2;
% cdata = imresize(cdata, scale);
n = 25;
contourf(cdata,n, 'LineStyle', 'none');
colormap(jet);
axis equal;

1 Ответ

0 голосов
/ 12 июня 2018

Прежде всего, не используйте imresize, если вы хотите векторное изображение.Imresize по умолчанию основан на растре и может вести себя странно.Также будьте более конкретны с тем, что вы хотите, пожалуйста.Если у вас уже есть векторный файл, вы можете просто изменить его на любой размер.

Также, если у вас есть только ограниченный набор данных, вы никогда не сможете получить действительно более высокое разрешение, вы можете только интерполировать промежуточные точки.Поэтому используйте interp2 , чтобы изменить размер матрицы данных.

[sx,sy] = size(cdata);
fact=1/4; %factor to interpolate over so 4 points per 1
[X,Y]=meshgrid(1:sx); %you can only use this because cdate is square, same size for sx and sy
[xq,yq]=meshgrid(1:fact:sx); %create a new mesh with more points
Cnew=interp2(X,Y,cdata,xq,yq,'spline'); %I suggest spline, probably does what you want

enter image description here

Это весь код для создания графика, обязательно сохраните его в формате .emf, .svg или .eps, еслиВы хотите векторное изображение

data = importdata('lsa2.txt', ' ', 6);
cdata = data.data;

rws=3
cls=2;
xl=[22 33]; yl=[13 23];
n = 25;
subplot(rws,cls,1)
contourf(cdata,n, 'LineStyle', 'none');
title('Subplot 1: Original no scaling')
colormap(jet);
axis equal;
xlim(xl);
ylim(yl);

scale = 4;
cresi = imresize(cdata, scale);
subplot(rws,cls,2)
contourf(cresi,n, 'LineStyle', 'none');
title('Subplot 2: Imresize function, scale 4')
colormap(jet);
axis equal;
xlim(scale*xl);
ylim(scale*yl);

[sx,sy] = size(cdata);
fact=1/4; %factor to interpolate over so 4 points per 1
[X,Y]=meshgrid(1:sx); %you can only use this because cdate is square, same size for sx and sy
[xq,yq]=meshgrid(1:fact:sx); %create a new mesh with more points
Cnew=interp2(X,Y,cdata,xq,yq);

subplot(rws,cls,3)
contourf(Cnew,n, 'LineStyle', 'none');
title('Subplot 3: Interp2 "linear", scale 4')
colormap(jet);
axis equal;
xlim(xl/fact);
ylim(yl/fact);

[sx,sy] = size(cdata);
fact=1/4; %factor to interpolate over so 4 points per 1
[X,Y]=meshgrid(1:sx);
[xq,yq]=meshgrid(1:fact:sx);
Cnew=interp2(X,Y,cdata,xq,yq,'spline');
subplot(rws,cls,4)
contourf(Cnew,n, 'LineStyle', 'none');
title('Subplot 4: Interp2 "spline", scale 4')
colormap(jet);
axis equal;
xlim(xl/fact);
ylim(yl/fact);

Cnew=interp2(X,Y,cdata,xq,yq,'cubic');
subplot(rws,cls,5)
contourf(Cnew,n, 'LineStyle', 'none');
title('Subplot 5: Interp2 "cubic", scale 4')
colormap(jet);
axis equal;
xlim(xl/fact);
ylim(yl/fact);

Cnew=interp2(X,Y,cdata,xq,yq,'nearest');
subplot(rws,cls,6)
contourf(Cnew,n, 'LineStyle', 'none');
title('Subplot 6: Interp2 "nearest", scale 4')
colormap(jet);
axis equal;
xlim(xl/fact);
ylim(yl/fact);
...