This is a 24x faster version of the histogram plot. It is not intended for inclusion into the Matplotlib code-base (unless you want to). It is just a small code-snippet in case someone else needs a much faster version of the histogram plot.
len(x) is 500k and
bins=100 then Matplotlib’s original
ax.hist function takes around 360 milli-sec for me, while this version only takes around 15 milli-sec, thus giving a 24x speedup. It also saves a significant amount of time when saving the plot, around 150 milli-sec for me. That’s a total saving of around 0.5 second.
This is of course not necessary for most use-cases, but it is useful to people who are doing real-time / low-latency plotting. I saved enough runtime that it was worth it to me.
import numpy as np def hist_fast(ax, x, bins, density=False, **kwargs): """Fast histogram plotting. More than 20x faster than `ax.hist` :param ax: Matplotlib Axes object. :param x: Array with data. :param density: See np.histogram. :param kwargs: Extra keyword-args passed to `ax.fill_between` """ # Calculate histogram bins and edges. hist, bin_edges = np.histogram(x, bins=bins, density=density) # Repeat histogram bins and edges to create steps. hist_steps = np.repeat(hist, 2) bin_edges_steps = np.repeat(bin_edges, 2)[1:-1] # Plot solid color as histogram. ax.fill_between(bin_edges_steps, 0.0, hist_steps, **kwargs) # Adjust y-axis limits. _, y_max = ax.get_ylim() ax.set_ylim(0.0, y_max)