加权直方图

时间:2019-01-24 21:30:05

标签: python plot histogram

我希望从matplotlib迁移到plotly,但似乎plotlypandas集成度不高。例如,我试图制作一个加权的直方图,指定垃圾箱的数量:

sns.distplot(df.X, bins=25, hist_kws={'weights':df.W.values},norm_hist=False,kde=False)  

但是我没有找到使用plotly来做到这一点的简单方法。如何以一种简单的方式使用pandas.DataFrameplotly制作数据直方图?

1 个答案:

答案 0 :(得分:3)

plotly直方图对象似乎不支持权重。但是,numpys直方图功能支持权重,并且可以轻松地计算出从可绘制条形图中创建直方图所需的所有信息。

我们可以构建一个看起来像您想要的占位符数据框:

# 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)
    })

您包含的电话会议可以使用以下数据:

# 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()

我们可以看到我们的任意1和3权重已正确应用于每种分布模式。

enter image description here

通过plotly,您可以仅将Bar图形对象与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')

您可能必须重新实现直方图的其他注释功能以适合您的用例,这些可能会带来更大的挑战,但绘图内容本身在绘图上效果很好。

在此处查看它的呈现:https://plot.ly/~Jwely/24/#plot