pythonのmatplotlibで2次元ヒストグラム(plt.hist2d)のビンの値 (bin contents)を直接操作する方法はない。なので、 colormesh
を使って描画しよう。
import numpy as np
import matplotlib.pyplot as plt
from itertools import product
Z, X, Y = np.histogram2d([],[],bins=[50,100],range=[[-10,10],[-10,10]])
xx = np.array([xy[0] for xy in product(X,Y)])
yy = np.array([xy[1] for xy in product(X,Y)])
def f(x,y):
return np.exp(-((x-1)**2) / (2 * 1**2)) * np.exp(-((y-2)**2) / (2 * 3**2))
Z = f(xx,yy).reshape(51, 101)
Z = np.rot90(Z)
Z = np.flipud(Z)
im = plt.pcolormesh(X,Y,Z,cmap="viridis")
im.set_clim(0,1.1)
plt.colorbar(im,label="Counts")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
このようにしてカラーマップを作成することが出来る。
普通のヒストグラム(一次元ヒストグラム)の場合
import numpy as np
import matplotlib.pyplot as plt
from itertools import product
_, X, Y = np.histogram2d([],[],bins=[10,10],range=[[-40,10],[0,20]])
im = plt.pcolormesh(X,Y,np.random.randn(10, 10),cmap="viridis")
im.set_clim(0,1.1)
plt.colorbar(im,label="Counts")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()