I'm looking to migrate from matplotlib to plotly,  but it seems that plotly does not have good integration with pandas. For example, I'm trying to make a weighted histogram specifying the number of bins: 
sns.distplot(df.X, bins=25, hist_kws={'weights':df.W.values},norm_hist=False,kde=False)  
But I´m not finding a simple way to do this with plotly.  How can I make a histogram of data from a pandas.DataFrame using plotly in a straightforward manner?
The plotly histogram graph object does not appear to support weights. However, numpys histogram function supports weights, and can easily calculate everything we need to create a histogram out of a plotly bar chart.
We can build a placeholder dataframe that looks like what you want with:
# dataframe with bimodal distribution to clearly see weight differences.
import pandas as pd
from numpy.random import normal
import numpy as np
df =pd.DataFrame(
    {"X": np.concatenate((normal(5, 1, 5000), normal(10, 1, 5000))),
     "W": np.array([1] * 5000 + [3] * 5000)
    })
The seaborn call you've included works with this data:
# weighted histogram with seaborn
from matplotlib import pyplot as plt
import seaborn as sns
sns.distplot(df.X, bins=25, 
    hist_kws={'weights':df.W.values}, norm_hist=False,kde=False)
plt.show()
We can see that our arbitrary 1 and 3 weights were properly applied to each mode of the distribution.

With plotly, you can just use the Bar graph object with numpy 
# with plotly, presuming you are authenticated
import plotly.plotly as py
import plotly.graph_objs as go
# compute weighted histogram with numpy
counts, bin_edges = np.histogram(df.X, bins=25, weights=df.W.values)
data = [go.Bar(x=bin_edges, y=counts)]
py.plot(data, filename='bar-histogram')
You may have to reimplement other annotation features of a histogram to fit your use case, and these may present a larger challenge, but the plot content itself works well on plotly.
See it rendered here: https://plot.ly/~Jwely/24/#plot
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With