我正在寻求从matplotlib迁移到plotly,但似乎情节上并没有与pandas良好的集成.例如,我正在尝试制作一个指定箱数的加权直方图:
sns.distplot(df.X,bins=25,hist_kws={'weights':df.W.values},norm_hist=False,kde=False)
但我没有找到一个简单的方法来做到这一点.如何以简单的方式使用pandas.DataFrame从pandas.DataFrame中直接绘制数据的直方图?
最佳答案
图形直方图图形对象似乎不支持权重.然而,numpys直方图功能支持权重,并且可以轻松地计算我们在绘制条形图中创建直方图所需的一切.
原文链接:https://www.f2er.com/python/438951.html我们可以构建一个看起来像你想要的占位符数据框:
# 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,5000))),"W": np.array([1] * 5000 + [3] * 5000)
})
您已包含的seaborn调用适用于此数据:
# weighted histogram with seaborn
from matplotlib import pyplot as plt
import seaborn as sns
sns.distplot(df.X,kde=False)
plt.show()
我们可以看到,我们的任意1和3权重适用于每种分布模式.
通过plotly,您可以使用带有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,weights=df.W.values)
data = [go.Bar(x=bin_edges,y=counts)]
py.plot(data,filename='bar-histogram')
您可能必须重新实现直方图的其他注记特征以适合您的用例,这些可能会带来更大的挑战,但情节内容本身在情节上很有效.
看到它呈现在这里:https://plot.ly/~Jwely/24/#plot