【问题标题】:Enlarge figure in MATLAB在 MATLAB 中放大图形
【发布时间】:2015-10-22 08:45:37
【问题描述】:

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

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

【问题讨论】:

    标签: matlab plot matlab-figure image-enlarge


    【解决方案1】:
    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]);
    

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

    【讨论】:

    • 谢谢。我现在把它放大了。但我想重新定位它,就像使用“平移”按钮一样。我怎样才能以编程方式做到这一点?
    • 我复制了您的代码,但发现它只会增加 x 轴和 y 轴的限制。由于我的数据仅涵盖 100x100x4 块,因此多余的区域变为白色。但我要移动的是整个图形,而不是仅仅扩展轴的限制。我使用patching方法绘制3D,它会影响结果吗?
    • 实际使用 zoom(1.9) 可以帮助我通过缩放来放大它,但是如何以编程方式进行“平移”?
    • 您希望您的身材如何准确移动? (我假设你有一个二维图)
    • 好吧,我就是这么想的。这不是您需要的“平底锅”。您需要将所有绘图相对于图形窗口向左移动,因为它太大了。当您设置MyAxes 的位置时,请尝试将其设置为[0.05,0.1,0.8,0.8] 而不是[0.1,0.1,0.8,0.8]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多