The answer:
Adding the following snippet to your setup will produce the plot below:
fig.update_traces(hovertemplate ='<i>Bin-range</i>:' + '%{x}' + '<extra></extra>',
selector=dict(type="histogram"))
The part selector=dict(type="histogram")
is there to only update the histogram traces and leave the lines alone. The '<extra></extra>'
part is as cool as it is cryptic, and simply removes 2012
and 2013
from the hoverlabels.

I hope this comes close to what you want to achieve. I'll have to take a closer look at the rounding part though. But all in all I think the plot looks pretty good as it is
Some details and comments:
To my knowledge, and contrary to the statements on github on plotly.figure_factory.create_distplot, ff.create_distplot
is in fact not headed towards deprecation. It's just not being updated anymore. Further, it appears that ff.create_distplot
still is the best alternative for creating hisograms with a normal distribution or kde estimation added to it. So it's not going anywhere in the foreseeable future.
Complete code:
import plotly.figure_factory as ff
import numpy as np
import pandas as pd
np.random.seed(123)
df = pd.DataFrame({'2012': np.random.randn(200),
'2013': np.random.randn(200)+1})
fig = ff.create_distplot([df[c] for c in df.columns],
df.columns, bin_size=.25, show_rug=False)
fig.update_traces(hovertemplate ='<i>Bin-range</i>:' + '%{x}' + '<extra></extra>',
selector=dict(type="histogram"))
#fig.update_layout(hoverinfo = 'x+y+text')
fig.show()