Well, I know how to add a colour bar to a figure, when I have created the figure directly with matplotlib.pyplot.plt
.
from matplotlib.colors imp
You are almost there with the 3rd option. You have to pass a mappable
object to colorbar
so it knows what colormap and limits to give the colorbar. That can be an AxesImage
or QuadMesh
, etc.
In the case of hist2D, the tuple returned in your h
contains that mappable
, but also some other things too.
From the docs:
Returns: The return value is (counts, xedges, yedges, Image).
So, to make the colorbar, we just need the Image
.
To fix your code:
from matplotlib.colors import LogNorm
import matplotlib.pyplot as plt
import numpy as np
# normal distribution center at x=0 and y=5
x = np.random.randn(100000)
y = np.random.randn(100000) + 5
fig, ax = plt.subplots()
h = ax.hist2d(x, y, bins=40, norm=LogNorm())
fig.colorbar(h[3], ax=ax)
Alternatively:
counts, xedges, yedges, im = ax.hist2d(x, y, bins=40, norm=LogNorm())
fig.colorbar(im, ax=ax)