如何在Matplotlib中使用对数刻度和对数分组直方图绘制hist2d?

3
以下是我遇到的问题的最简示例:
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。)


在版本3.02中,图表看起来像预期的那样,所以可能是一个错误? - Thomas Kühn
@ThomasKühn 刚刚更新了我的版本,可以确认你的观察结果。现在看起来不错。如果你把你的评论变成答案,我会接受它。 - Tobias Hermann
1个回答

2
这似乎是版本2.2.2中的一个错误。在版本3.02中,代码的输出看起来像人们所期望的一样:

result of the OPs code with matplotlib version 3.02


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