代码之家  ›  专栏  ›  技术社区  ›  Tobias Hermann

如何在matplotlib中使用hist2d的日志比例和日志箱?

  •  2
  • Tobias Hermann  · 技术社区  · 6 年前

    下面的最小示例显示了我的问题:

    import matplotlib.pyplot as plt
    import numpy as np
    
    X = np.random.normal(30, 10, 1000)
    Y = np.random.normal(200, 500, 1000)
    
    x_space = np.linspace(0, 60, 6)
    print('x_space:', x_space)
    
    y_space = np.logspace(np.log10(1.0), np.log10(1000.0), 30)
    print('y_space:', y_space)
    
    plt.hist2d(X, Y, bins=(x_space, y_space))
    plt.yscale('log')
    plt.show()
    

    我希望箱子在图形中显示的大小相等,因为y轴上的日志比例和y的日志空间应该相等。然而,情况似乎并非如此。

    enter image description here

    在我看来,生成的垃圾箱的文本输出没有问题:

    x_space: [ 0. 12. 24. 36. 48. 60.]
    y_space: [   1.            1.268961      1.61026203    2.04335972    2.5929438
        3.29034456    4.17531894    5.29831691    6.72335754    8.53167852
       10.82636734   13.73823796   17.43328822   22.12216291   28.07216204
       35.6224789    45.20353656   57.3615251    72.78953844   92.36708572
      117.21022975  148.73521073  188.73918221  239.502662    303.91953823
      385.66204212  489.39009185  621.01694189  788.04628157 1000.        ]
    

    但它与所绘制的并不一致。

    我做错了什么,或者这可能是图书馆里的错误?

    (我使用的是matplotlib版本2.2.2。)

    1 回复  |  直到 6 年前
        1
  •  1
  •   Thomas Kühn    6 年前

    这似乎是版本2.2.2中的一个错误。在版本3.02中,代码的输出看起来与预期的一样:

    result of the OPs code with matplotlib version 3.02