2009-09-29 5 views
13

Я рисую график, используя график (), но по умолчанию он не показывает оси.Как показать оси x и y в графе MATLAB?

Как включить отображение осей при x = 0 и y = 0 на графике?

На самом деле мой граф что-то вроде: alt text

И я хочу горизонтальную линию, соответствующую у = 0. Как это получить?

+0

@eSKay: Пожалуйста, вы можете предоставить некоторые примеры кода для того, как вы сделали свой график. plot() должен показывать оси, поэтому было бы интересно посмотреть, что вы сделали, чтобы они не отображались. –

+2

Есть ли http: // stackoverflow.com/questions/1466498/help-cross-axis-and-labels-in-matlab help? Если нет, как то, что вы хотите, отличается от того, что там задается? –

+0

@ Richie Cotton x и y - массивы. мой код - просто график (y, x); – Lazer

ответ

8

По умолчанию, график делает показывать оси, если вы не изменили некоторые настройки. Попробуйте следующее

hold on; % make sure no new plot window is created on every plot command 
axes(); % produce plot window with axes 
plot(% whatever your plot command is); 
plot([0 10], [0 0], 'k-'); % plot the horizontal line 
+0

@Martijn привет! Оси(); переопределяет мои оригинальные топоры, поэтому я не использую это. последняя строка генерирует требуемую ось при выполнении отдельно, но она не накладывает ось на исходный график даже при удержании; Любая идея, что может быть проблемой? – Lazer

+0

Это странно. Это делается в моей версии matlab (7.6.0.324 (R2008a)) (вы можете получить номер версии с помощью команды version). Если вы хотите поместить ось x где-то посередине изображения, это невозможно в моей версии: ось x находится либо сверху, либо внизу (вы можете установить это с помощью свойства «XAxisLocation»). – Martijn

+0

Проблема, которую я обнаружил, заключается в том, что 'hold on;' инициализирует один набор осей, затем 'axes();' команда создает вторую поверх первой, а вторая становится текущими осями и не удерживается на". Простой «сюжет (...); Оставайтесь на линии; сюжет (...); 'порядок должен работать. – gnovice

3

Возможно, grid on будет достаточным.

+0

сетка в порядке (позволяет мне видеть пересечения), но топоры были бы лучше! – Lazer

2

@Martijn Ваш заказ вызовов функций немного выключен. Попробуйте вместо этого:

x=-3:0.1:3; 
y = x.^3; 
plot(x,y), hold on 
plot([-3 3], [0 0], 'k:') 
hold off 
+0

На самом деле проблема была в 'axes():' call Martijn сделал (см. Мой комментарий выше). Если вы «держитесь»; участок (х, у); plot (...); 'все равно будет работать правильно. – gnovice

+0

Я предполагаю, что вы правы, его просто задержание, прежде чем замышлять что-нибудь, откроет пустую фигуру (с осями по умолчанию), а затем будет перезаписана сюжетом. С другой стороны, вызывая его после построения чего-то, имеет смысл (удерживайте текущий сюжет) – Amro

+0

@Amro: Правда, более интуитивно, чтобы команда удержания выполнялась после первой команды plot. – gnovice

2

Я знаю, что это приходит немного поздно, но мой коллега понял, что-то из:

figure, plot ((1:10),cos(rand(1,10))-0.75,'*-') 
hold on 
plot ((1:10),zeros(1,10),'k+-') 
text([1:10]-0.09,ones(1,10).*-0.015,[{'0' '1' '2' '3' '4' '5' '6' '7' '8' '9'}]) 
set(gca,'XTick',[], 'XColor',[1 1 1]) 
box off 
+0

Приятная идея, я превратил ее в функцию: http://www.mathworks.com/matlabcentral/fileexchange/54326-axes0-varargin- – Delyle

4

Если вы хотите оси появляться больше похож на перекрестие, вместо по краям, попробуйте axescenter от Matlab FEX.

EDIT: только что заметили, что это уже указано в ссылке выше, Jitse Nielsen.

+0

это делает то, что ему нужно для его описания, но требует дополнительной зависимости. –

5

Решение бедного человека состоит в том, чтобы просто начертить линии x = 0 и y = 0. Вы можете настроить толщину и цвет линий, чтобы отличить их от графика.

+3

это делает то, что ему нужно без зависимости, но требует строк строки: 'hold on; plot ([0 0], ylim, 'k'); hold; plot (xlim, [0 0], 'k'); мой код не отображает отметки для оси tho ... –

-1

Самое простое решение:

plot([0,0],[0.0], xData, yData);

Это создает невидимую линию между точками [0,0] до [0,0], а с Matlab хочет включить эти моменты она будет показана ось.

0

Вдохновленный @ ответ Луизы, я сделал функцию, axes0

x = linspace(-2,2,101); 
plot(x,2*x.^3-3*x+1); 
axes0 

Example output for axes0

Вы можете, перейдя по ссылке выше, чтобы загрузить функцию и получить более подробную информацию об использовании

2

Это должно работа в Матлабе:

set(gca, 'XAxisLocation', 'origin') 

Опции: нижний, верхний, начальный.

Для Y.axis:

YAxisLocation; left, right, origin 
Смежные вопросы