0

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

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

对话扩大了。如果我还希望此对话框中的图形也放大,我该怎么办?虽然我可以在对话框中使用“放大”和“平移”来放大和重新定位我的图表,但我希望这可以通过代码自动完成。

非常感谢。

我的问题的更新:

我正在尝试绘制 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

4

1 回答 1

3
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]);

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

更新:为了像“平移”按钮一样重新定位图形,您必须更改轴'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]);

我认为您可以自己弄清楚如何放大/缩小,因为它还涉及玩图表的限制。

于 2015-10-22T09:06:36.440 回答