2013-09-25 6 views
1

Предположим, что У меня есть 2 фигуры в MATLAB, оба из которых содержат данные размером (512x512), однако одна фигура строится внешней программой, которая задает параметры оси. Другой рисуется мной (используя imagesc). В настоящее время цифры, или, скорее, оси разных размеров, и мой вопрос в том, как сделать их равными?. Причина моего вопроса заключается в том, что я хотел бы экспортировать их в формат pdf для включения в латексный документ, и я хотел бы, чтобы они были одного размера без дальнейшей обработки.Как указать размер оси при построении чертежей в Matlab?

Спасибо заранее, N

Edit: ссылка на цифры

figure 1: (big)

link to smaller figure (i.e. the one whose properties I would like to copy and apply to figure 1)

+1

Возможно, вы можете ссылаться на примеры двух участков? – Dan

+0

Несмотря на то, что внешняя программа определяет начальный размер осей для одной фигуры, вы должны иметь возможность затем гомогенизировать две оси. Просто сохраните дескрипторы и задайте свойства размера одинаковыми? – Bonlenfum

ответ

1

Для этой цели используют linkaxes():

% Load some data included with MATLAB 
load clown 

% Plot a histogram in the first subplot 
figure 
ax(1) = subplot(211); 
hist(X(:),100) 

% Create second subplot 
ax(2) = subplot(212); 

Теперь связать оси двух сюжетных:

linkaxes(ax) 

Построив на второй подзаголовок, первый будет адаптироваться

imagesc(X) 

Во-первых, вы следующее: enter image description here

Тогда:

enter image description here

Продолжая пример только изображения:

load clown 
figure 
imagesc(X) 
h(1) = gca; 

I = imread('eight.tif'); 
figure 
imagesc(I) 
h(2) = gca; 

Обратите внимание, что конфигурации в первой ручки преобладают:

linkaxes(h) 
+0

+1 очень хороший fcn, не знал об этом! это новая функция? –

+0

@LuciusDomitiusAhenobarbus Функция существует некоторое время, так как R14, http://www.mathworks.co.uk/help/releases/R14/techdoc/ref/linkaxes.html – Oleg

+0

-> Доступ к архивной документации является преимуществом для лицензированных пользователей продуктов MathWorks. Спасибо за информацию, но я обычно не вошел в систему с учетной записью mathworks :) –

1

1.Get ручки вашей фигуры и осей, как это:

%perhaps the easiest way, if you have just this one figure: 
myFigHandle=gcf; 
myAxHandle=gca; 
%if not possible, you have to search for the handles: 
myFigHandle=findobj('PropertyName',PropertyValue,...) 
%you have to know some property to identify it of course... 
%same for the axes! 

2.Set свойства, как это:

%set units to pixels (or whatever you prefer to make it easier to compare to the other plot) 
set(myFigHandle, 'Units','pixels') 
set(myAxHandle, 'Units','pixels') 
%set the size: 
set(myFigHandle,'Position',[x_0 y_0 width height]) %coordinates on screen! 
%set the size of the axes: 
set(myAxHandle,'Position',[x_0 y_0 width height]) %coordinates within the figure! 
0

Ok, на основе ответа @Lucius Домиция Ahenoba вот что я придумал:

hgload('fig1.fig'); % figure whose axis properties I would like to copy 
hgload('fig2.fig'); 
figHandles = get(0,'Children'); 
figHandles = sort(figHandles,1); 
ax(1) = findobj(figHandles(1),'type','axes','-not','Tag','legend','-not','Tag','Colorbar'); 
ax(2) = findobj(figHandles(2),'type','axes','-not','Tag','legend','-not','Tag','Colorbar'); 

screen_pos1 = get(figHandles(1),'Position'); 
axis_pos1 = get(ax(1),'Position'); 

set(figHandles(2),'Position',screen_pos1); 
set(ax(2),'Position',axis_pos1); 

Это «перед» результат: enter image description here

и это «после того, как ': enter image description here

Почти правильно, за исключением того, что пропорции по-прежнему отключены. Кто-нибудь знает, как уравнять все, что связано с осями? (Я понимаю, что я не должен задавать вопросы при публикации ответов, однако, добавив выше, как комментарий, оказалось немного громоздким!)

+0

Вы проверили, что единицы являются то же самое для обоих? вы должны отлаживать его, проверяя, что ручки являются строгим. –

+0

@LuciusDomitiusAhenobarbus Так как мой код изменил рисунок 2 (справа вверху), я предполагаю, что ручки верны (?). Единицы для обеих осей также одинаковы. – Neil

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

  • Нет связанных вопросов^_^