在 MATLAB 中放大图形

Enlarge figure in MATLAB

我想创建放大的图形,我使用:

fig = figure(1); %These two lines maximize the figure dialogue
set (fig, 'Units', 'normalized', 'Position', [0,0,1,1]);

对话放大了。如果我也想把这个对话框里面的图也放大怎么办?虽然我可以在对话框中使用 "zoom in" 和 "pan" 来放大和重新定位我的图表,但我希望这可以通过代码自动完成。

非常感谢。

我的问题更新:

我正在尝试绘制 3D 块,其值由每个小单位块的颜色表示:

clear; close all; clc; 
fig = figure(1); 
set (fig, 'Units', 'normalized', 'Position', [0,0,1,1]);
fig_color='w'; fig_colordef='white';
cMap=jet(256); %set the colomap using the "jet" scale
faceAlpha1=1;
faceAlpha2=0.65;
edgeColor1='none';
edgeColor2='none';
NumBoxX=100;%box number in x direction
NumBoxY=100;%box number in y direction
NumBoxZ=5;%box number in z direction

fid = fopen('Stress.dat','r');
datacell = textscan(fid, '%f%f%f%f%f%f%f%f%f%f%f%f%f%f'); 
fclose(fid);

all_data = cell2mat(datacell); 

M=zeros(NumBoxX,NumBoxY,NumBoxZ); 

for i=1:NumBoxX            
    for j=1:NumBoxY        
        for k=1:NumBoxZ     
            num=k+NumBoxZ*(j-1)+NumBoxZ*NumBoxY*(i-1);
            M(i,j,k)=all_data(num,4); %the forth column of all_data is dislocation density 
        end
    end
end

indPatch=1:numel(M);
[F,V,C]=ind2patch(indPatch,M,'v'); %Call the function ind2patch in order to plot 3D cube with color

title('\sigma_{xy}','fontsize',20);
xlabel('y','fontsize',20);ylabel('x','fontsize',20); zlabel('z','fontsize',20); hold on;
set(get(gca,'xlabel'),'Position',[5 -50 30]); 
set(get(gca,'ylabel'),'Position',[5 50 -15]);
set(get(gca,'zlabel'),'Position',[64 190 -60]);
patch('Faces',F,'Vertices',V,'FaceColor','flat','CData',C,'EdgeColor','k','FaceAlpha',0.5);
axis equal; view(3); axis tight; axis vis3d; grid off;
colormap(cMap); caxis([min(M(:)) max(M(:))]);
cb = colorbar;                                     
set(get(cb,'title'),'string','Stress (MPa)','fontsize',20);
lbpos = get(cb,'title'); % get the handle of the colorbar title
set(lbpos,'units','normalized','position',[0,1.04]);
zoom(1.9);

我最大化对话,从文件中读取数据并使用在互联网上找到的函数 "ind2patch" 创建框,每个框的颜色由分配给它的值决定。在最后一部分,我使用 zoom(1.9) 放大了它,但我想在不移动颜色条的情况下移动整个图形。

以下为放大前的原图: https://www.dropbox.com/s/xashny3w1fwcb2f/small.jpg?dl=0

下图使用zoom(1.9)放大后: https://www.dropbox.com/s/0sfqq1lgo7cm5jd/large.jpg?dl=0

MyAxes=gca;
set(MyAxes,'Units','Normalized','position',[0.1,0.1,0.8,0.8]);

请注意,您定义的位置是相对于您的父坐标轴,即图形。

如果您要放大的图形不是当前图形,则必须挖掘 fig 对象的子对象才能找到轴:

MyAxes=get(fig,'Children');
set(MyAxes,'Units','Normalized','position',[0.1,0.1,0.8,0.8]);

请注意,如果您的图形包含多个子图(因此有多个轴),则必须遍历所有子图才能按您想要的方式放大它们。

更新: 为了像 "pan" 按钮那样重新定位图表,您必须更改坐标轴 'xlim''ylim' 属性。例如,如果你想将它向右移动 5% 并向顶部移动 10% :

 %Get current limits
 MyXLimits=get(MyAxes,'xlim'); %1x2 vector [xmin,xmax]
 MyYLimits=get(MyAxes,'ylim'); %1x2 vector [ymin,ymax]

 %Calculate desired limits
 MyNewXLimits=[MyXLimits(1)+0.05*(MyXLimits(2)-MyXLimits(1))...
               MyXLimits(2)+0.05*(MyXLimits(2)-MyXLimits(1))];

 MyNewYLimits=[MyYLimits(1)+0.1*(MyYLimits(2)-MyYLimits(1))...
               MyYLimits(2)+0.1*(MyYLimits(2)-MyYLimits(1))];

 % Set desired limits
 set(MyAxes,'xlim',MyNewXLimits);
 set(MyAxes,'ylim',MyNewYLimits);

或者如果您知道先验您想要的 X 和 Y 限制:

 %Set desired limits directly
 set(MyAxes,'xlim',[Myxmin Myxmax]);
 set(MyAxes,'ylim',[Myymin Myymax]);

我想你可以自己弄清楚如何缩小 in/zoom,因为它还涉及到你的图表的限制。