我想比较幸存者的人数与性别。 我有类似的东西:
Name, Survived, Sex
John, 0, male
Ana, 1, female
Leo, 1, male
Peter, 0, male
并尝试创建如下所示的条形图: https://pythonspot.com/wp-content/uploads/2015/07/barchart_python.png.webp
我尝试过这种方式
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
data = pd.read_csv('titanic_data/train.csv')
figure1 = plt.bar(range(4), data[data['Sex']=='male']['Survived'].value_counts(), label='Male')
figure2 = plt.bar(range(4), data[data['Sex']=='female']['Survived'].value_counts(), label='Female')
plt.legend()
plt.xticks(np.arange(4), rotation=0)
plt.title("Third class survivors")
plt.show()
但是它显示“ ValueError:形状不匹配:对象无法广播为单个形状”。我该怎么办?
答案 0 :(得分:1)
有两个问题:
首先:在读取csv文件中的值时,列名中包含多余的空格。要摆脱这些限制,您可以使用skipinitialspace=True
第二:您使用range(4)
绘制条形图,而男性和女性类别只有两个条形图。结果,您得到"ValueError: shape mismatch
。因此,最好使用男女计数的长度
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
data = pd.read_csv('titanic_data/train.csv', skipinitialspace=True)
males = data[data['Sex']=='male']['Survived'].value_counts()
females = data[data['Sex']=='female']['Survived'].value_counts()
figure1 = plt.bar(range(len(males)), males, align='edge', width=0.4, label='Male')
figure2 = plt.bar(range(len(females)), females, align='edge', width=-0.4, label='Female')
plt.legend()
plt.xticks(np.arange(len(males)), rotation=0)
plt.title("Third class survivors")
plt.show()
答案 1 :(得分:0)