Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 两种不同的可视化结果_Python_Pandas_Matplotlib_Data Science - Fatal编程技术网

Python 两种不同的可视化结果

Python 两种不同的可视化结果,python,pandas,matplotlib,data-science,Python,Pandas,Matplotlib,Data Science,我的数据如下所示: Survived,Pclass,Name,Sex 0,3,"Braund, Mr. Owen Harris",male 1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female 1,3,"Heikkinen, Miss. Laina",female 1,1,"Futrelle, Mrs. Jacques Heath (Lily May

我的数据如下所示:

Survived,Pclass,Name,Sex
0,3,"Braund, Mr. Owen Harris",male
1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female
1,3,"Heikkinen, Miss. Laina",female
1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female
0,3,"Allen, Mr. William Henry",male
0,3,"Moran, Mr. James",male,
当我试图比较头等舱的幸存者人数和性别时,我发现了奇怪的结果

当我试着这样做的时候

data[(data['Sex']=='female') & (data['Pclass']== 1)]['Survived'].value_counts().plot(kind='bar')


plt.legend()
plt.xticks(np.arange(2), rotation=0)
plt.title("Male and female survivors in first class")

plt.show()
它表明,几乎所有头等舱的女性都活了下来(这是正确的)

但当我尝试这样做时:

import pandas as pd
from matplotlib import pyplot as plt
import numpy as np

data = pd.read_csv('titanic_data/train.csv')

males = data[(data['Sex']=='male') & (data['Pclass'] == 1)]['Survived'].value_counts()
females = data[(data['Sex']=='female') & (data['Pclass']== 1)]['Survived'].value_counts()

plt.bar(range(len(females)), females, align='edge', width=-0.4, label='Female', color='red', alpha=0.5)
plt.bar(range(len(males)), males, align='edge', width=0.4, label='Male', color='blue', alpha=0.5)


plt.legend()
plt.xticks(np.arange(len(males)), rotation=0)
plt.title("Male and female survivors in first class")

plt.show()
这表明几乎所有女性都死了(这是错误的!)

结果是正确的。

采用条形图的x坐标,但您提供的是
范围(len(女性))
,它只是将0,1任意分配给条形图,而不查看
值计数()输出中
列的顺序。您希望为x坐标提供的是索引。例如:

plt.bar(females.index, females, align='edge', width=-0.4, label='Female', color='red', alpha=0.5)

这对我来说很好。我有2只雌性存活,0只雄性存活。尝试打印(女性)
,您将看到2无法重现您的问题。我有0只雄性和2只雌性幸存下来。我想问题在于视觉效果。添加
plt.xticks(np.arange(4),旋转=0)
,您将看到与
df.plot类似的外观条。
使用完整数据文件:我更新了问题。打印(女性)后,我看到“1-94,0-3”。这不是我在条形图上看到的。现在它正在工作。但为什么“男性”栏显示正确?我的方法与女性相同。男性的
value\u counts()
的输出顺序恰好正确(0,1)。可能是因为0的值先于1,所以它先计算0。