【问题标题】:Plot very small values with matplotlib in jupyter在 jupyter 中使用 matplotlib 绘制非常小的值
【发布时间】:2016-10-30 13:03:25
【问题描述】:

我正在尝试在 jupyter notebook(在 macbook pro 上)中使用 matplotlib 绘制一些非常小的值。但是,无论我是否设置了 y 轴限制,我得到的只是一条平线。我所追求的是类似于下面关于 y 轴表示法的示例 (png)。我还在 jupyter 之外尝试了相同的示例,但仍然得到相同的结果。这是my previous question上的代码suggested by Andrew Walker

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(13,6))
ax = fig.add_subplot(111)
plt.hold(True)


xs = np.linspace(0, 1, 101)
ys = 1e-300 * np.exp(-(xs-0.5)**2/0.01)

ax.plot(xs, ys, marker='.')

这是我得到的:

这就是我所追求的:

【问题讨论】:

  • 经过测试ax.set_ylim(0, 1e300) 实际上将其设置为-0.001(它在设置时返回限制)。你可以去并真正让它工作的最低点是ax.set_ylim(0.0,1e-286)
  • 1e-300 接近您可以在双精度中表示的最小值。最好扩展您的数据,以免您不在该范围内。

标签: python matplotlib jupyter


【解决方案1】:

最简单的做法是绘制你的值乘以 10^300,然后更改 y 轴标签:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(13,6))
ax = fig.add_subplot(111)
plt.hold(True)

xs = np.linspace(0, 1, 101)
ys = np.exp(-(xs-0.5)**2/0.01)

ax.plot(xs, ys, marker='.')

ax.set_ylabel(r'Value [x 10^{-300}]')

【讨论】:

    【解决方案2】:

    您可以在您的轴对象上使用 set_ylim 方法来做您需要的事情,只需将您的代码更改为这个,它就会做您需要的事情:

    %matplotlib inline
    import matplotlib.pyplot as plt
    import numpy as np
    
    fig = plt.figure(figsize=(13,6))
    ax = fig.add_subplot(111)
    plt.hold(True)
    
    
    xs = np.linspace(0, 1, 101)
    ys = 1e-300 * np.exp(-(xs-0.5)**2/0.01)
    
    ax.set_ylim([0,10^-299])
    
    ax.plot(xs, ys, marker='.')
    

    您可能想查看This link 以获取有关此主题的更多信息。

    【讨论】:

    • 这不起作用(试试看)——1e-299 太小,matplotlib 不接受它作为限制值..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2016-05-11
    相关资源
    最近更新 更多