我创建了一个虚拟数据帧,类似于我正在使用的数据帧 . 数据框包括票价,机舱类型和生存(1是活着的,0 =死的) .
第一个图通过factorplot创建了许多图,每个图表示Cabin类型 . x轴由票价代表,Y轴只是该票价的出现次数 .
然后我做的是通过[Cabin,Fare]的groupby创建另一个系列,然后继续采取生存的平均值来获得每个客舱和票价的存活率 .
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(dict(
Fare=[20, 10, 30, 40, 40, 10, 20, 30, 40 ,30, 20, 30, 30],
Cabin=list('AAABCDBDCDDDC'),
Survived=[1, 0, 0, 0 ,0 ,1 ,1 ,0 ,1 ,1 , 0, 1, 1]
))
g =sns.factorplot(x='Fare', col='Cabin', kind='count', data=df,
col_wrap=3, size=3, aspect=1.3, palette='muted')
plt.show()
x =df.groupby(['Cabin','Fare']).Survived.mean()
我想要做的是,在上面的计数图上绘制一个线图,(所以x轴是相同的,每个图仍然由一个Cabin类型表示),但我希望y轴是我们用上面代码中的groupby系列x计算的生存率,输出时将是下面的第三列 .
Cabin Fare
A 10 0.000000
20 1.000000
30 0.000000
B 20 1.000000
40 0.000000
C 30 1.000000
40 0.500000
D 10 1.000000
20 0.000000
30 0.666667
线图的y轴应该在右侧,我想要的范围是[0,.20, . 40,.60,.80,1.0,1.2]
我查看了seaborn docs一段时间,但我无法弄清楚如何正确地做到这一点 .
我想要的输出看起来像这个图像 . 我知道如何使用油漆 . 因此,刻度线和数字位于每个图的右侧 . 线图将在每个x,y点通过点连接 . 因此对于机舱A,第一个x,y点是(10,0),0对应于右y轴 . 第二点是(20,1),依此类推 .
1 回答
Data operations:
计算频率计数:
计算意味着整个组并将其重新取出以获得
DF
.Nan's
保持不变,并没有被零替换's to show the break in the line plot or else they would be continuous which wouldn'这里有意义 .准备x轴标签作为字符串:
Plotting: