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) # np.histogram2dの仕様上必要 Z = np.flipud(Z) # np.histogram2dの仕様上必要 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()