10

私はこれができるかどうか疑問に思っていました。numpy logspace を使用してビンを明示的に設定しようとしました。また、xscale を「log」に設定しようとしました。これらのオプションはどちらも機能しません。誰もこれを試したことがありますか?

対数 x 軸と線形 y 軸を持つ 2D ヒストグラムが必要です。

4

1 に答える 1

18

正しく動作しない理由は、大きな画像に対してはるかに効率的な方法 をplt.hist2d使用しているが、対数軸をサポートしていないためです。pcolorfast

np.histogram2d対数軸で正しく機能する 2D ヒストグラムを作成するには、 と を使用して自分で作成する必要がありますax.pcolor。ただし、これは 1 行の余分なコードにすぎません。

まず、線形軸上で指数関数的に間隔をあけたビンを使用しましょう。

import numpy as np
import matplotlib.pyplot as plt

x, y = np.random.random((2, 1000))
x = 10**x

xbins = 10**np.linspace(0, 1, 10)
ybins = np.linspace(0, 1, 10)

fig, ax = plt.subplots()
ax.hist2d(x, y, bins=(xbins, ybins))

plt.show()

ここに画像の説明を入力

わかりました、すべて順調です。x 軸に対数スケールを使用するとどうなるか見てみましょう。

import numpy as np
import matplotlib.pyplot as plt

x, y = np.random.random((2, 1000))
x = 10**x

xbins = 10**np.linspace(0, 1, 10)
ybins = np.linspace(0, 1, 10)

fig, ax = plt.subplots()
ax.hist2d(x, y, bins=(xbins, ybins))

ax.set_xscale('log') # <-- Only difference from previous example

plt.show()

ここに画像の説明を入力

対数スケーリングが適用されているように見えますが、色付きの画像 (ヒストグラム) にはそれが反映されていないことに注意してください。ビンは正方形に見えるはずです。によって作成されたアーティストがpcolorfast対数軸をサポートしていないためではありません。

これを修正するには、 (舞台裏を使用するnp.histogram2dもの) を使用してヒストグラムを作成し、対数軸をサポートする(または) を使用してプロットします。plt.hist2dpcolormeshpcolor

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1977)

x, y = np.random.random((2, 1000))
x = 10**x

xbins = 10**np.linspace(0, 1, 10)
ybins = np.linspace(0, 1, 10)

counts, _, _ = np.histogram2d(x, y, bins=(xbins, ybins))

fig, ax = plt.subplots()
ax.pcolormesh(xbins, ybins, counts.T)

ax.set_xscale('log')

plt.show()

(軸が(Y、X)の順序であると予想されるcountsため、ここで転置する必要があることに注意してください。)pcolormesh

これで、期待どおりの結果が得られました。

ここに画像の説明を入力

于 2015-03-20T22:42:46.557 に答える