2015-10-22 6 views
0

Я хочу, чтобы создать фигуру, которая увеличивается, я использую:Увеличить рисунок в MATLAB

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», найденную в Интернете для создания ящиков, каждая из которых имеет цвет, определенный назначенным ему значением. В последней части я использовал масштабирование (1.9), чтобы увеличить его, но я хочу переместить всю фигуру, не перемещая цветную панель.

Ниже исходное изображение, прежде чем масштаб изображения: https://www.dropbox.com/s/xashny3w1fwcb2f/small.jpg?dl=0

Следующая фотография увеличена с помощью увеличения (1.9): https://www.dropbox.com/s/0sfqq1lgo7cm5jd/large.jpg?dl=0

ответ

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

Обратите внимание, что положение можно определить это по отношению к вашему оси, т.е. фигура.

Если фигура вы хотите увеличить это не текущая цифра, вам придется рыть у детей вашего рис объекта для того, чтобы найти оси:

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

Обратите внимание, что, если ваша фигура содержит несколько subplots (таким образом, несколько осей), вам нужно будет перевернуть все их, чтобы увеличить их так, как вы хотите.

UPDATE: Для вправления своего графика, как бы кнопка «пан» делать, вы должны изменить ваши оси '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); 

Или, если вы знаете, априори Х и Y пределы вы хотите:

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

Я думаю, вы можете понять, как увеличить/уменьшить масштаб самостоятельно, так как это также включает в себя игру с пределами вашего графика.

+0

спасибо. Я увеличил его сейчас. Но я хочу изменить его так же, как использовать кнопку «панорамирование». Как я могу сделать это программно? –

+0

Я редактирую свой ответ – BillBokeey

+0

Я скопировал ваши коды, но обнаружил, что он только увеличивает пределы осей x и y. Поскольку мои данные охватывают только блок 100x100x4, избыточная область становится белой. Но то, что я хочу переместить, - это целая фигура, а не просто расширение лимита осей. Я использую метод patching для построения 3D-изображения, не влияют ли на результат? –

Смежные вопросы