【问题标题】:Eliminate negative zero in axes ticks消除轴刻度中的负零
【发布时间】:2017-05-10 01:21:24
【问题描述】:

我发现在某些情况下,MATLAB 会打印负 -0.0 作为轴刻度。我怎样才能消除这种情况?

问题代码

y = linspace(-.4,.3,100);
plot(y)
ax = gca();
ax.YAxis.TickLabelFormat = '%.1f'`

此代码生成类似this 的图,其中读取的零刻度不是“0.0”,而是“-0.0”。

我认为这里的关键是Y轴的最大值和最小值之间的间隔不能精确地表示为浮点数,所以'零'刻度实际上位于-5.6e-17。如果改为使用格式 ax.YAxis.TickLabelFormat = '%.1e'

,您可以看到这一点

出于挑剔的格式原因,我真的更喜欢我所有的轴刻度都具有相同的位数(即 -0.1、0.0、0.1 而不是 -0.1、0、0.1)。有没有办法消除这种格式中的负零?

在 MacOS Sierra 10.12.4 上使用 MATLAB2017a

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    您选择浮点格式,floating point accuracy issues 会得到您想要的结果。你可以定义y = linspace(-.4,.3,100)+eps;来解决它...

    【讨论】:

    • 谢谢,这行得通!对于我的实际问题(涉及使用axis 命令),同样可以通过将axis([0 100 -0.4 0.3]) 更改为axis([0 100 -0.4 0.3+eps]) 来解决
    • 另外,我已向 Mathworks 提交了一份关于此问题和解决方法的错误报告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    相关资源
    最近更新 更多