Как показать оси x и y на графике MATLAB?

Я рисую график с помощью функции plot(), но по умолчанию оси не отображаются.

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

На самом деле мой график выглядит примерно так: alt text

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


person Lazer    schedule 29.09.2009    source источник
comment
@eSKay: Пожалуйста, не могли бы вы предоставить пример кода того, как вы построили свой график. plot() должен отображать оси, поэтому было бы интересно посмотреть, что вы сделали, чтобы они не отображались.   -  person Richie Cotton    schedule 29.09.2009
comment
@Richie Cotton x и y - массивы. мой код - это просто график (y, x);   -  person Lazer    schedule 29.09.2009
comment
@Jitse Niesen спасибо за ссылку.   -  person Lazer    schedule 29.09.2009


Ответы (9)


Это должно работать в Matlab:

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

Возможные варианты: нижний, верхний, исходный.

Для оси Y:

YAxisLocation; left, right, origin
person dysan    schedule 01.04.2016

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

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
person Martijn    schedule 29.09.2009
comment
@Martijn привет! оси(); переопределяет мои исходные оси, поэтому я не использую это. последняя строка генерирует требуемую ось при отдельном запуске, но не накладывает ось на исходный график даже при удержании; Есть идеи, в чем может быть проблема?? - person Lazer; 29.09.2009
comment
Это странно. Это происходит в моей версии Matlab (7.6.0.324 (R2008a)) (вы можете получить номер версии с помощью команды version). Если вы хотите разместить ось x где-то посередине изображения, в моей версии это невозможно: ось x находится либо вверху, либо внизу (вы можете установить это с помощью свойства XAxisLocation). - person Martijn; 29.09.2009
comment
Проблема, которую я обнаружил, заключается в том, что hold on; инициализирует один набор осей, затем команда axes(); создает второй поверх первого, и этот второй становится текущими осями и не удерживается. Простой plot(...); hold on; plot(...); порядок должен работать. - person gnovice; 29.09.2009
comment
Возможно, Мартин хотел использовать ось на вместо осей. - person Amro; 30.09.2009
comment
@Amro: это тоже возможно. Я не полностью осознаю разницу между ними; тем не менее, оси нарисованы в «коробочном» стиле - person Martijn; 30.09.2009

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

person bta    schedule 02.08.2010
comment
это делает то, что ему нужно, без зависимости, но требует строк кода: hold on;plot([0 0],ylim,'k');hold on;plot(xlim,[0 0],'k'); мой код не рисует деления для оси, хотя... - person Trevor Boyd Smith; 22.05.2012

Если вы хотите, чтобы оси выглядели как перекрестие, а не по краям, попробуйте axescenter из Matlab FEX.

РЕДАКТИРОВАТЬ: только что заметил, что это уже указано в приведенной выше ссылке Jitse Nielsen.

person Matt Mizumi    schedule 02.08.2010
comment
это делает то, что ему нужно лучше всего для его описания, но требует дополнительной зависимости. - person Trevor Boyd Smith; 22.05.2012

Может быть, grid on будет достаточно.

person Mikhail    schedule 29.09.2009
comment
сетка в порядке (позволяет мне видеть пересечения), но оси были бы лучше! - person Lazer; 29.09.2009

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

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
person Luisa    schedule 31.05.2010
comment
Хорошая идея, я превратил ее в функцию: mathworks.com/matlabcentral/fileexchange /54326-axes0-varargin- - person Delyle; 05.12.2015

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

x=-3:0.1:3;
y = x.^3;
plot(x,y), hold on
plot([-3 3], [0 0], 'k:')
hold off
person Amro    schedule 29.09.2009
comment
На самом деле, проблема заключалась в axes(); звонке Мартейна (см. мой комментарий выше). Если у вас есть hold on; plot(x,y); plot(...);, он все равно будет работать правильно. - person gnovice; 29.09.2009
comment
Я думаю, вы правы, просто вызов Hold перед тем, как что-либо построить, откроет пустую фигуру (с осями по умолчанию), а затем перезапишет график. С другой стороны, вызов его после построения графика имеет больше смысла (удерживайте текущий график) - person Amro; 29.09.2009
comment
@Amro: Правда, более интуитивно понятно, что команда удержания следует за первой командой построения графика. - person gnovice; 29.09.2009

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

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

Пример вывода для осей0

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

person Delyle    schedule 04.12.2015

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

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

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

person Joop    schedule 15.11.2014