【问题标题】:How to show x and y axes in a MATLAB graph?如何在 MATLAB 图中显示 x 轴和 y 轴?
【发布时间】:2009-09-29 05:55:25
【问题描述】:

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

我们如何在图表上显示 x=0 和 y=0 的轴?

其实我的图是这样的:

我想要一条对应于y=0的水平线。 我如何得到它?

【问题讨论】:

  • @eSKay:请您提供一些示例代码来说明您是如何制作图表的。 plot() 应该显示轴,所以看看你做了什么让它们不显示会很有趣。
  • stackoverflow.com/questions/1466498/… 有帮助吗?如果不是,您想要的与那里要求的有何不同?
  • @Richie Cotton x 和 y 是数组。我的代码只是 plot(y,x);
  • @Jitse Niesen 感谢您的链接。

标签: matlab graph draw axes


【解决方案1】:

这应该在 Matlab 中工作:

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

选项有:底部、顶部、原点。

对于 Y 轴:

YAxisLocation; left, right, origin

【讨论】:

    【解决方案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
    

    【讨论】:

    【解决方案3】:

    受@Luisa 的回答启发,我做了一个函数,axes0

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

    您可以点击上面的链接下载该功能并获取更多使用详情

    【讨论】:

      【解决方案4】:

      默认情况下,绘图确实显示轴,除非您修改了某些设置。试试下面的

      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 嗨!轴();覆盖我原来的轴,所以我没有使用它。最后一行在单独运行时确实会生成所需的轴,但即使按住它也不会覆盖原始图上的轴;知道问题可能是什么吗??
      • 这很奇怪。它在我的 matlab 版本(7.6.0.324(R2008a))中确实如此(您可以使用 version 命令检索版本号)。如果您想将 x 轴放置在图片中间的某个位置,这在我的版本中是不可能的:x 轴位于顶部或底部(您可以使用“XAxisLocation”属性进行设置) .
      • 我发现的问题是hold on;初始化了一组轴,然后axes();命令在第一个之上创建第二个,第二个成为当前轴而不是“坚持住”。一个简单的plot(...); hold on; plot(...); 订单应该可以工作。
      • 也许 Martijn 的意思是使用 axis on 而不是 axes
      • @Amro:这也是一种可能。我并不完全了解两者之间的区别。尽管如此,轴仍以“盒装”样式绘制
      【解决方案5】:

      如果您希望轴看起来更像十字准线,而不是沿着边缘,请尝试使用 Matlab FEX 中的axescenter

      编辑:刚刚注意到 Jitse Nielsen 在上面的链接中已经指出了这一点。

      【讨论】:

      • 这对他的描述做了他最需要的,但需要额外的依赖。
      【解决方案6】:

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

      【讨论】:

      • 这在没有依赖关系的情况下完成了他所需要的,但需要一行代码:hold on;plot([0 0],ylim,'k');hold on;plot(xlim,[0 0],'k'); 我的代码没有为轴绘制刻度线...
      【解决方案7】:

      也许grid on 就足够了。

      【讨论】:

      • grid on 没问题(让我看看交叉点),但轴会更好!
      【解决方案8】:

      @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(...);,它仍然可以正常工作。
      • 我猜你是对的,只是在绘制任何内容之前调用 hold on 会打开一个空图形(带有默认轴),然后被绘图覆盖。另一方面,在绘图后调用它更有意义(保持当前绘图)
      • @Amro:没错,在第一个 plot 命令之后有 hold 命令更直观。
      【解决方案9】:

      最简单的解决方案:

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

      这会在点 [0,0] 到 [0,0] 之间创建一条不可见的线,并且由于 Matlab 想要包含这些点,它将显示轴。

      【讨论】:

        猜你喜欢
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-07
        • 1970-01-01
        • 2010-11-19
        • 2013-02-26
        • 1970-01-01
        相关资源
        最近更新 更多