Python 为划分为多个存储箱的数据绘制一个方框和胡须图

Python 为划分为多个存储箱的数据绘制一个方框和胡须图,python,matplotlib,plot,seaborn,boxplot,Python,Matplotlib,Plot,Seaborn,Boxplot,我有一个包含两列(f1和f2)的数据框。您可以使用以下方法创建示例数据帧: # intialise data of lists. data = {'f1':[20,183,19,45,9173,11,482], 'f2':[771,8773,91,837,917,891,11]} # Create DataFrame d = pd.DataFrame(data) # Print the output. d 我使用以下代码将数据帧划分为20个存储箱:

我有一个包含两列(f1和f2)的数据框。您可以使用以下方法创建示例数据帧:


# intialise data of lists. 
data = {'f1':[20,183,19,45,9173,11,482], 
        'f2':[771,8773,91,837,917,891,11]} 
  
# Create DataFrame 
d = pd.DataFrame(data) 
  
# Print the output. 
d 

我使用以下代码将数据帧划分为20个存储箱:

d['feature2'].value_counts(bins=20, sort=False)
然而,上面提到的代码行给出了每个箱子中的计数。我想将数据框拆分为20个存储箱,然后为这两个功能的每个存储箱绘制框和胡须图

我知道hexbin,hist2d有一个参数nbins:


fig, axes = plt.subplots(ncols=2, nrows=1, figsize=(21, 5))

nbins = 40
axes[0].set_title('Hexbin')
axes[0].hexbin(d.f1, d.f2, gridsize=nbins, cmap=plt.cm.BuGn_r)

# 2D Histogram
axes[1].set_title('2D Histogram')
axes[1].hist2d(d.f1, d.f2, bins=nbins, cmap=plt.cm.BuGn_r)

但它不存在于箱线图中。因此,我想将我的数据帧划分为20个存储箱,对于每个存储箱,我想为两列绘制box和whisker图。我怎样才能做到这一点。如有见解,将不胜感激

编辑:


我们有点不清楚到底想要什么

这里有一个使用Seaborn的方法。首先将数据帧转换为“长”形式,然后为值创建20个箱子,最后为每个特征创建箱线图:

从matplotlib导入pyplot作为plt
作为pd进口熊猫
将numpy作为np导入
导入seaborn作为sns
d=pd.DataFrame({'f1':np.random.rand(100100).cumsum(axis=0).ravel(),
'f2':np.random.rand(100100).cumsum(axis=0.ravel()})
dlong=d.melt(变量名称='feature',值名称='value')
dlong['bin']=局部切割(dlong['value'],20)
图,ax=plt.子批次(图尺寸=(20,5))
箱线图(数据=dlong,x='bins',y='value',色调='feature',ax=ax)
最大刻度参数(轴=x',旋转=90)
plt.紧_布局()
plt.show()

以下是使用相同的存储箱创建两个子地块的方法:

d=pd.DataFrame({'f1':np.random.rand(100100).cumsum(axis=0).ravel(),
'f2':np.random.rand(100100).cumsum(axis=0.ravel()})
dlong=d.melt(变量名称='feature',值名称='value')
dlong['bin']=局部切割(dlong['value'],10)
图(ax1,ax2)=plt.子批次(nrows=2,figsize=(12,10))
sns.boxplot(数据=dlong[dlong['feature']=='f1'],x='bin',y='value',ax=ax1)
sns.boxplot(数据=dlong[dlong['feature']=='f2'],x='bin',y='value',ax=ax2)
ax1.设置标题('feature=f1')
ax2.设置标题('feature=f2')

功能2
在您的数据框架中不作为列存在这正是我想要做的。谢谢只是我的f1在f2以下。我怎样才能让他们分开。我做10个箱子。我也放了这个图像。是的,我试过了。但是f1和f2的箱子变得不同,因此这两个图形不可比较。您可以使用固定箱子,例如
bins=np.arange(min,max,step)
d['bins\u f1']=pd.cut(d['f1'],bins=bins)
。固定垃圾箱还有一个额外的好处,垃圾箱的边缘是更好的数字。这正是我所需要的。谢谢,我刚刚做了。谢谢:)