2016-07-15 2 views
-1

Я только начал изучать Python, и я использую данные Titanic набор на практикуСоздания Сгруппированных баров в Matplotlib

Я не в состоянии создать сгруппированную гистограмму и он дает мне ошибку «несовместимых размеры: аргумент «высота» должны быть длиной 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

Вы можете проверить [this] (http://stackoverflow.com/a/20159305/2901002) и добавить некоторые выборочные данные на свой вопрос. – jezrael

+0

Я использую train.csv отсюда https://www.kaggle.com/c/titanic/data – Anu8

ответ

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 и heightplt.bar должны либо иметь одинаковую длину, либо одну или две из них должны быть скаляром. Вот почему изменение index в вашем коде на простые скаляры 0 и 1 исправляет ошибку.