#!/usr/bin/env python # coding: utf-8 # # Adaptive histogram # # This type of histogram automatically adapts bins when new values are added. Note that only fixed-width continuous binning scheme is currently supported. # In[15]: # Necessary import evil from physt import h1 import numpy as np import matplotlib.pyplot as plt # In[16]: # Create an empty histogram h = h1(None, "fixed_width", bin_width=10, name="People height", axis_name="cm", adaptive=True) h # ## Adding single values # In[17]: # Add a first value h.fill(157) h.plot() h # In[18]: # Add a second value h.fill(173) h.plot() # In[19]: # Add a few more values, including weights h.fill(173, 2) h.fill(186, 5) h.fill(188, 3) h.fill(193, 1) h.plot(errors=True, show_stats=True); # ## Adding multiple values at once # In[20]: ha = h1(None, "fixed_width", bin_width=10, adaptive=True) ha.plot(show_stats=True); # In[21]: # Beginning ha.fill_n([10, 11, 34]) ha.plot(); # In[22]: # Add a distant value ha.fill_n([234], weights=[10]) ha.plot(show_stats=True); # In[23]: # Let's create a huge dataset values = np.random.normal(130, 20, 100000) # In[24]: get_ipython().run_cell_magic('time', '', '# Add lots of values (no loop in Python)\nhn = h1(None, "fixed_width", bin_width=10, adaptive=True)\nhn.fill_n(values)\n# ha.plot()\n') # In[25]: get_ipython().run_cell_magic('time', '', '# Comparison with Python loop\nhp = h1(None, "fixed_width", bin_width=10, adaptive=True)\nfor value in values:\n hp.fill(value)\n') # In[26]: # Hopefully equal results print("Equal?", hp == hn) hp.plot(show_stats=True); # ## Adding two adaptive histograms together # In[27]: ha1 = h1(None, "fixed_width", bin_width=5, adaptive=True) ha1.fill_n(np.random.normal(100, 10, 1000)) ha2 = h1(None, "fixed_width", bin_width=5, adaptive=True) ha2.fill_n(np.random.normal(70, 10, 500)) ha = ha1 + ha2 fig, ax= plt.subplots() ha1.plot(alpha=0.1, ax=ax, label="1", color="red") ha2.plot(alpha=0.1, ax=ax, label="2") ha.plot("scatter", label="sum", ax=ax, errors=True) ax.legend(loc=2); # TODO? Why don't we show the sum???