fill() function leaves gaps. What am I doing wrong? How do I correct this?
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
simon swarbrick
am 18 Aug. 2022
Kommentiert: Image Analyst
am 19 Aug. 2022
I am trying to plot some 2D data in a pcolor plot. It should be confined to a circular region in the center of the plot and I am trying to make the region outside this circle white using the fill function. However, I find that there a radial lines of color still - as if the fill function is leaving gaps. What am I doing wrong? How can I correct this?
My code is as follows:
clc;
clear all;
close all;
%% Set Global Font to Latex
set(groot,'defaulttextinterpreter','latex');
set(groot, 'defaultAxesTickLabelInterpreter','latex');
set(groot, 'defaultLegendInterpreter','latex');
%% Import data
saveOutput = false;
folder = pwd;
filename1 = "slice0.mat";
filepath1 = strcat(folder,'\',filename1);
imp1 = load(filepath1);
rawData1 = imp1.Expression1;
x1 = 1000*rawData1(:,1);
y1 = 1000*rawData1(:,2);
b1 = rawData1(:,3);
xpp1 = reshape(x1,[31 31]);
ypp1 = reshape(y1,[31 31]);
bpp1 = reshape(b1,[31 31]);
%% Plotting
xlab = 'y (mm)';
ylab = 'x (mm)';
fontSize = 12;
% Get data for the two circles
theta = 0.00000:0.01:2*pi;
r1 = 7.75;
r2 = 15;
xp1 = r1*cos(theta);
yp1 = r1*sin(theta);
xp10 = r2*cos(theta);
yp10 = r2*sin(theta);
figx0 = 1;
figy0 = 1;
figscale = 16;
figwidth = figscale;
figheight = figscale;
% Begin figure
fig1 = figure('Units','centimeters',...
'Position',[figx0,figy0,figwidth,figheight],...
'PaperPositionMode','auto',...
'Renderer', 'Painters');
h = pcolor(xpp1,ypp1,bpp1);
set(h, 'EdgeColor', 'none');
axis square
colormap(hot(256));
colorbar
caxis([0 1.8]);
set(gcf, 'Color', 'w');
shading interp
xlabel(xlab,'Interpreter','latex','FontSize', fontSize)
ylabel(ylab,'Interpreter','latex','FontSize', fontSize)
hold on
plot(xp1,yp1,'w')
plot(xp10,yp10,'w')
% Fill in the area by defining the polygon that is defined by tracing the inner circle and then back along the outer circle
fill([xp1 flip(xp10)],[yp1 flip(yp10)],'w')
% Cover up the connecting line in the same color
h = line([xp1(1) xp10(end)],[yp1(1) yp10(end)]);
set(h,'Color','w')
set(gca,'layer','top')
grid off
%% Export
exFilename = "slices";
if saveOutput
exfolder = folder;
filename = exFilename;
exfilepath = strcat(exfolder,'\',filename,".pdf");
exfilepathEPS = strcat(exfolder,'\',filename,".eps");
% export_fig(fig1,exfilepath)
% saveas(gcf,exfilepath);
% print(exfilepath,'-dpdf');
print(exfilepathEPS,'-depsc2');
end
and the resulting figure:
where you can see that outside the circular region there are gaps where the fill function has missed bits.
Note that there are no errors.
Thanks in advance!
0 Kommentare
Akzeptierte Antwort
Image Analyst
am 18 Aug. 2022
2 Kommentare
Image Analyst
am 19 Aug. 2022
Well that's the resolution of your raw data. If you want a smoother display, you could always use interp2 to interpolate your data up to a larger size.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Colormaps finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!