物理の駅 by onsanai

Physics-station 研究で日々感じたことを忘れないための備忘録

pythonのmatplotlibで2次元ヒストグラム(hist2d)のビンの値を直接操作する

pythonのmatplotlibで2次元ヒストグラム(plt.hist2d)のビンの値 (bin contents)を直接操作する方法はない。なので、 colormesh を使って描画しよう。

import matplotlib.pyplot as plt
import numpy as np

def f(x, y):
    return np.exp(-(x * x) / (2 * 3 ** 2)) * np.exp(-(y * y) / (2 * 3 ** 2))

X, Y = np.mgrid[0:21:1.0, 0:21:1.0]

X-=10.0
Y-=10.0
Y*=2.0

Z = f(X,Y)

fig, ax = plt.subplots()
im = ax.pcolormesh(X, Y, Z, cmap='inferno',vmin=0,vmax=1.1)
ax.set_xlabel("X")
ax.set_ylabel("Y")
cbar = fig.colorbar(im)
cbar.set_label("Z")
plt.show()

このようにしてカラーマップを作成することが出来る。

f:id:onsanai:20190703085418p:plain
二次元ヒストグラムっぽい絵

普通のヒストグラム(一次元ヒストグラム)も、棒グラフを使ってヒストグラムっぽく表示することが出来る。

import matplotlib.pyplot as plt
import numpy as np
 
X = np.array([i for i in range(-10,10)])
Y = np.exp(-(X * X) / (2 * 3 ** 2))
plt.bar(X, Y, width=1.0)
plt.show()

f:id:onsanai:20190430233014p:plain
一次元ヒストグラムっぽい絵