如何在MATLAB图形中显示x和y轴?

15

我正在使用 plot() 函数绘制图表,但默认情况下它不显示坐标轴。

如何在图表上启用显示 x=0 和 y=0 的坐标轴?

事实上,我的图表类似于:alt text

我想要一条对应于 y=0 的水平线。 我该怎么做?


@eSKay:请问您能提供一些您制作图表的示例代码吗?plot()应该会显示坐标轴,所以很有趣看看您是如何让它们不显示的。 - Richie Cotton
2
这个网址https://dev59.com/90nSa4cB1Zd3GeqPOXs7有帮助吗?如果不是,你想要的和那里所问的有什么不同? - Jitse Niesen
@Richie Cotton x和y是数组。我的代码只是plot(y,x); - Lazer
@Jitse Niesen,感谢您提供的链接。 - Lazer
9个回答

11

这应该在Matlab中运行:

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

选项包括:bottom(底部)、top(顶部)、origin(原点)。

对于Y轴:

YAxisLocation; left, right, origin

9

默认情况下,绘图显示坐标轴,除非您修改了一些设置。尝试以下操作:

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

@Martijn 你好!axes(); 覆盖了我的原始坐标轴,所以我不使用它。最后一行在单独运行时确实生成了所需的坐标轴,但即使使用 hold on; 也无法将其叠加在原始图上。你有什么想法吗?? - Lazer
这很奇怪。在我的Matlab版本(7.6.0.324 (R2008a))中是可以的(你可以使用version命令获取版本号)。 如果你想把x轴放在图片中间,这在我的版本中是不可能的:x轴要么在顶部,要么在底部(你可以使用“XAxisLocation”属性来设置)。 - Martijn
我发现的问题是 hold on; 命令会初始化一个坐标轴,然后 axes(); 命令会在第一个坐标轴上创建一个新的坐标轴,第二个坐标轴成为当前坐标轴并且无法 "hold on" 。简单的 plot(...); hold on; plot(...); 命令顺序应该能够解决问题。 - gnovice
也许Martijn的意思是要使用axis on,而不是axes。 - Amro
@Amro:这也是一种可能性。我对两者之间的区别不是很清楚;不过,坐标轴以“盒式”风格绘制。 - Martijn

5
穷人的解决方案是简单地绘制线条x=0和y=0。您可以调整线条的粗细和颜色,以使它们与图表区分开来。

3
这段代码不需要依赖其他内容就能实现他想要的功能,但需要编写几行代码: hold on;plot([0 0],ylim,'k');hold on;plot(xlim,[0 0],'k'); 然而我的代码没有绘制坐标轴刻度线... - Trevor Boyd Smith

4
如果你想让坐标轴更像十字线,而不是沿边缘,可以尝试来自Matlab FEX的axescenter
编辑:刚刚注意到Jitse Nielsen在上面的链接中已经指出了这一点。

这个程序按照他的描述完成了所需的功能,但需要额外的依赖。 - Trevor Boyd Smith

3

我知道这有点晚了,但我的同事找到了一些解决方法:

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

好主意,我把它转化为一个函数:http://www.mathworks.com/matlabcentral/fileexchange/54326-axes0-varargin- - Delyle

3
也许只需要使用grid on即可。

网格线是可以的(让我看到交点),但坐标轴会更好! - Lazer

2

@Martijn,你的函数调用顺序略有偏差。请尝试使用以下方式:

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

实际上,问题出在Martijn所做的axes();调用上(请参见我上面的评论)。如果你有hold on; plot(x,y); plot(...);,它仍然会正确地工作。 - gnovice
我猜你说得对,只不过在绘制任何内容之前调用 hold 命令会打开一个空图形(带有默认坐标轴),然后再被 plot 函数覆盖。相反,在绘制完内容后调用它会更有意义(保持当前的绘图)。 - Amro
@Amro:确实,让hold命令在第一个绘图命令后更直观。 - gnovice

1
受@Luisa答案的启发,我做了一个函数,axes0
x = linspace(-2,2,101);
plot(x,2*x.^3-3*x+1);
axes0

Example output for axes0

你可以点击上面的链接下载该函数并了解更多使用细节。

-1
最简单的解决方案:
```matlab plot([0,0],[0.0], xData, yData); ```
这将在点[0,0]到[0,0]之间创建一条不可见的线,并且由于Matlab希望包括这些点,它会显示坐标轴。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接