切割x轴以生成多个带有seaborn的图形?

时间:2016-10-18 23:56:05

标签: pandas matplotlib seaborn

以下代码在绘制时看起来非常混乱。原因是我对'票价'有太多的价值。 '票价'的范围为[0-500],大多数值在前100个范围内。

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



titanic = sns.load_dataset("titanic")



y =titanic.groupby([titanic.fare//1,'sex']).survived.mean().reset_index()




sns.set(style="whitegrid")
g = sns.factorplot(x='fare', y= 'survived', col = 'sex', kind ='bar' ,data= y,
               size=4, aspect =2.5 , palette="muted")
g.despine(left=True)
g.set_ylabels("Survival Probability")
g.set_xlabels('Fare')
plt.show()

我想尝试将图表的'票价'切成子集,但希望在一个屏幕上同时看到所有图表。我想知道这是可能的,而不必诉诸groupby。 我将不得不使用'票价'的值来看看我希望每个图表代表什么,但是对于一个样本,我们可以使用将图表分解为这些'票价'值。

[0-18]
[18-35]
[35-70]
[70-300]
[300-500]

因此,由于与异性的并置,总共将在一页上显示10个图表。

Seaborn可以吗?我是否需要使用matplotlib进行大量配置?谢谢。

1 个答案:

答案 0 :(得分:2)

其实我写了一点blog post about this a while ago。如果您要绘制直方图,可以使用by关键字:

import matplotlib.pyplot as plt
import seaborn.apionly as sns

sns.set() #rescue matplotlib's styles from the early '90s

data = sns.load_dataset('titanic')
data.hist(by='class', column = 'fare')
plt.show()

enter image description here

否则,如果您只是绘制值计数,则必须滚动自己的网格:

def categorical_hist(self,column,by,layout=None,legend=None,**params):
  from math import sqrt, ceil
  if layout==None:
    s = ceil(sqrt(self[column].unique().size))
    layout = (s,s)

  return self.groupby(by)[column]\
             .value_counts()\
             .sort_index()\
             .unstack()\
             .plot.bar(subplots=True,layout=layout,legend=None,**params)


categorical_hist(data, by='class', column='embark_town')

enter image description here

编辑如果你想要按票价范围存活率,你可以做这样的事情

data.groupby(pd.cut(data.fare,10)).apply(lambda x.survived.sum(): x./len(x))

enter image description here