Seaborn:设置一个distplot bin范围?

时间:2017-05-13 07:12:24

标签: python matplotlib seaborn

所以我有这个数据集显示数十亿的国家的GDP(所以1万亿gdp = 1000)。

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

df = pd.read_csv('2014_World_GDP')
df.sort('GDP (BILLIONS)',ascending=False, inplace=True)
sorted = df['GDP (BILLIONS)']

fig, ax = plt.subplots(figsize=(12, 8))
sns.distplot(sorted,bins=8,kde=False,ax=ax)

上面的代码给出了下图: image

我想做什么谁设置了箱子范围,所以他们看起来更像[250,500,750,1000,2000,5000,10000,20000]。

有没有办法在seaborn中做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以使用对数容器,它可以很好地处理您的数据。这是一个例子:

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

df = pd.DataFrame()
df['GDP (BILLIONS)'] = 2000*1./(np.random.random(250))
df.sort_values(by='GDP (BILLIONS)',ascending=False, inplace=True)

fig, ax = plt.subplots(1,2,figsize=(8, 3))

sns.distplot(df['GDP (BILLIONS)'].values,bins=8,kde=False,ax=ax[0])
ax[0].set_title('Linear Bins')

LogMin, LogMax = np.log10(df['GDP (BILLIONS)'].min()),np.log10(df['GDP (BILLIONS)'].max())
newBins = np.logspace(LogMin, LogMax,8)
sns.distplot(df['GDP (BILLIONS)'].values,bins=newBins,kde=False,ax=ax[1])
ax[1].set_xscale('log')
ax[1].set_title('Log Bins')

fig.show()

enter image description here

答案 1 :(得分:2)

您可以将bin范围作为一个序列,在您的情况下为:

sns.distplot(df['GDP (BILLIONS)'].values,
             bins=[250,500,750,1000,2000,5000,10000,20000],
             kde=False,ax=ax[0])

但是,仅执行此操作不会更改x轴比例,您需要在Robbie答案中设置比例线才能做到这一点。