增加seaborn distplot中的垃圾箱之间的空间

时间:2017-11-06 19:54:39

标签: python matplotlib histogram seaborn bins

所以我有这个可能是一个简单的问题。我用seaborn的excel文件中的数据创建了一个直方图。为了更好的可视化,我想在条/箱之间留出一些空间。这可能吗?

我的代码如下所示

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

%matplotlib inline
from IPython.display import set_matplotlib_formats
set_matplotlib_formats('svg', 'pdf')


df = pd.read_excel('test.xlsx')
sns.set_style("white")
#sns.set_style("dark")
plt.figure(figsize=(12,10))
plt.xlabel('a', fontsize=18)
plt.ylabel('test2', fontsize=18)

plt.title ('tests ^2', fontsize=22)


ax = sns.distplot(st,bins=34, kde=False, hist_kws={'range':(0,1), 'edgecolor':'black', 'alpha':1.0}, axlabel='test1')

虽然有点偏离主题的第二个问题是,我如何让图表标题中的指数真正被提升?

谢谢!

3 个答案:

答案 0 :(得分:6)

matplotlib hist函数有一个参数rwidth

  

rwidth:标量或无,可选
  条的相对宽度作为箱宽的一部分。

您可以通过distplot参数在hist_kws内使用此功能。

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

x = np.random.normal(0.5,0.2,1600)

ax = sns.distplot(x,bins=34, kde=False, 
                  hist_kws={"rwidth":0.75,'edgecolor':'black', 'alpha':1.0})

plt.show()

hist_kws

答案 1 :(得分:1)

对于 Seaborn >= 0.11,使用 shrink 参数。它通过此参数相对于 binwidth 缩放每个条的宽度。其余的将是空的。

文档:https://seaborn.pydata.org/generated/seaborn.histplot.html

答案 2 :(得分:0)

发布我的答案后,我意识到我的回答与所问的相反。我在试图弄清楚如何删除条形之间的空间时发现了这个问题。我几乎删除了我的答案,但如果其他人在这个问题上偶然发现并试图删除 seaborn 的 histplot 中的条形之间的空间,我会暂时离开它。

感谢@miro 为 Seaborn 的 updated documentation,我发现 element='step' 对我有用。完全取决于您想要什么,element='poly' 可能就是您想要的。

我的“步骤”实现:

fig,axs = plt.subplots(4,2,figsize=(10,10))
i,j = 0,0
for col in cols:
    sns.histplot(df[col],ax=axs[i,j],bins=100,element='step')
    axs[i,j].set(title="",ylabel='Frequency',xlabel=labels[col])
    i+=1
    if i == 4: 
        i = 0
        j+=1

enter image description here

我对“poly”的实现:

fig,axs = plt.subplots(4,2,figsize=(10,10))
i,j = 0,0
for col in cols:
    sns.histplot(df[col],ax=axs[i,j],bins=100,element='poly')
    axs[i,j].set(title="",ylabel='Frequency',xlabel=labels[col])
    i+=1
    if i == 4: 
        i = 0
        j+=1

enter image description here