以下代码在绘制时看起来非常混乱。原因是我对'票价'有太多的价值。 '票价'的范围为[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进行大量配置?谢谢。
答案 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()
否则,如果您只是绘制值计数,则必须滚动自己的网格:
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')
编辑如果你想要按票价范围存活率,你可以做这样的事情
data.groupby(pd.cut(data.fare,10)).apply(lambda x.survived.sum(): x./len(x))