在Matplotlib

时间:2016-07-15 18:27:47

标签: python numpy pandas matplotlib bar-chart

我刚刚开始学习python,我正在使用泰坦尼克号数据集来练习

我无法创建分组条形图,它给我一个错误 '不兼容的尺寸:参数'身高'必须是长度2或标量

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

df = pd.read_csv("Titanic/train.csv")

top_five = df.head(5)
print(top_five)
column_no = df.columns
print(column_no)

female_count = len([p for p in df["Sex"] if p == 'female'])
male_count = len([i for i in df["Sex"] if i == 'male'])

have_survived= len([m for m in df["Survived"] if m == 1])
not_survived = len([n for n in df["Survived"] if n == 0])


plt.bar([0],female_count, color ='b')
plt.bar([1],male_count,color = 'y')
plt.xticks([0+0.2,1+0.2],['females','males'])
plt.show()

plt.bar([0],not_survived, color ='r')
plt.bar([1],have_survived, color ='g')
plt.xticks([0+0.2,1+0.2],['not_survived','have_survived'])
plt.show()

它工作正常,直到这里我得到两个单独的图表

相反,我希望一个图表显示男性和女性的条形图,颜色代码根据生存情况显示条形图。

这似乎不起作用

N = 2
index = np.arange(N)
bar_width = 0.35

plt.bar(index, have_survived, bar_width, color ='b')
plt.bar(index + bar_width, not_survived, bar_width,color ='r',)

plt.xticks([0+0.2,1+0.2],['females','males'])
plt.legend()

提前致谢!!

1 个答案:

答案 0 :(得分:0)

如何用这个

替换你的第二个代码块(一个返回ValueError的代码)
bar_width = 0.35
tot_people_count = (female_count + male_count) * 1.0

plt.bar(0, female_count, bar_width, color ='b')
plt.bar(1, male_count, bar_width, color ='y',)

plt.bar(0, have_survived/tot_people_count*female_count, bar_width, color='r')
plt.bar(1, have_survived/tot_people_count*male_count, bar_width, color='g')

plt.xticks([0+0.2,1+0.2],['females','males'])

plt.legend(['female deceased', 'male deceased', 'female survivors', 'male survivors'],
           loc='best')

我把这个条形图作为输出,

enter image description here

您得到错误的原因是left的{​​{1}}和height参数必须具有彼此相同的长度,或者它们中的一个(或两个)必须是一个标量。这就是为什么将代码中的plt.bar更改为简单标量index0可以解决错误。