在使用matplotlib
绘制直方图时手动提供容器列表相对容易,如示例here所示。
以下是一个简单的例子:
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.hist(np.random.randn(10000), bins=np.arange(-4, 4, 0.1))
ax.hist(0.2 * np.random.randn(10000), bins=np.arange(-4, 4, 0.1))
plt.show()
这也可以通过pandas.DataFrame
与
pd.DataFrame({
'firstHistogram': np.random.randn(10000),
'secondHistogram': 0.2 * np.random.randn(10000)
}).plot(kind='hist', bins=np.arange(-4, 4, 0.1))
更进一步,plotly
允许通过pandas
模块直接与cufflinks
接口,允许执行以下操作:
pd.DataFrame({
'firstHistogram': np.random.randn(10000),
'secondHistogram': 0.2 * np.random.randn(10000)
}).iplot(kind='hist', bins=100)
但是这里有一个问题:iplot
提供的cufflinks
方法似乎不接受bins
的列表。
当提供一个数字时,如上例所示,该数字用于独立地存储两个数据集,这导致不相等的分级,可能会产生误导性结果(参见上图中的相等高度)。
虽然使用histnorm='density'
选项可以稍微减轻这种影响,但人们可能希望看到每箱的计数而不是密度。
有解决方法吗?
答案 0 :(得分:5)
我已为此添加了更新。
您现在应该可以指定pd.DataFrame({
'firstHistogram': np.random.randn(10000),
'secondHistogram': 0.2 * np.random.randn(10000)}).iplot(kind='hist',bins=(-4,4,.08))
Set wz3= Workbooks("Book1")
wz3.Worksheets("Sheet1").Range("A:G").Clear
现在应该返回: Custom bins
答案 1 :(得分:2)
据我所知,袖扣中没有直接的方式。在我看来,你的代码中显示的输出是错误的,即我认为这是袖扣中的一个错误。
但是您可以使用几行代码轻松模仿袖扣功能。您可以使用cufflinks.getLayout()
获得相同的布局,只需将barmode
设置为overlay
。
import pandas as pd
import plotly
import cufflinks
plotly.offline.init_notebook_mode()
pd.DataFrame({
'firstHistogram': np.random.randn(10000),
'secondHistogram': 0.2 * np.random.randn(10000)
})
data = list()
for dd in df:
histo = plotly.graph_objs.Histogram(x=df[dd],
name=dd,
xbins={'start': -4, 'end': 4, 'size': 0.08},
autobinx=False,
opacity=0.8
)
data.append(histo)
layout = plotly.graph_objs.Layout(cufflinks.getLayout(),
barmode='overlay')
fig = plotly.graph_objs.Figure(data=data,
layout=layout)
plotly.offline.iplot(fig)