我刚刚开始学习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()
提前致谢!!
答案 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')
我把这个条形图作为输出,
您得到错误的原因是left
的{{1}}和height
参数必须具有彼此相同的长度,或者它们中的一个(或两个)必须是一个标量。这就是为什么将代码中的plt.bar
更改为简单标量index
和0
可以解决错误。