2017-04-30 4 views
0

ich eine CSV-Datensatz haben, die wie folgt aussieht:Python Stacked Bar gefärbt von Kategorie

Account  Months_since_Open  Gender  Age_Group 
XXXXX    12    Male  Millennial 
YYYYY    24    Female  71+ 
ZZZZZ    20    Female  55-70 

Der Datensatz für Millionen von Zeilen weiter. Grundsätzlich möchte ich ein Balkendiagramm, das Monate_Seit_Offen auf der X-Achse und Anzahl der Konten (Häufigkeit) auf der Y-Achse hat. Außerdem möchte ich, dass die Balken nach Altersgruppe gefärbt sind.

Bisher das ist, was ich habe:

import pandas as pd 
import numpy as np 
import statsmodels.api as sm 
import pylab as pl 
from scipy import stats 
from sklearn.externals.six import StringIO 
from sklearn import preprocessing 
from sklearn import cluster, tree, decomposition 
import matplotlib.pyplot as plt 
import pydot 
import os 
import seaborn as sns 

df1 = pd.read_csv("LiveSeg.csv") 


sexgroup = df.groupby('Gender') 
Female = df[(df['Gender'] == 'FEMALE')] 
plt.hist(Female.AcctAge_Months.dropna(),bins =50) 

Das gibt mir die folgende Ausgabe: enter image description here

Wie kann ich diese Balken sind vom% der Kunden in der Altersgruppe gefärbt? Ich benutze Python 3.4.4 Danke

+0

Also, im Grunde wollen Sie, dass jeder Balken eine andere Farbe hat? –

+0

Nein, ich möchte, dass jeder Balken entsprechend seiner Altersgruppe farbig ist. Grundsätzlich, wenn Millennials 50% der Konten in einem dieser Bars geöffnet hat, möchte ich, dass dieser Balken 50% gelb gefärbt ist, die nächsten 25% waren ab der Altersgruppe 71+ dann sollte der Balken 50% gelb, 25% rot und sein bald –

Antwort

1

Sie müssen das Histogramm von Matplotlib zurückkehren und speichern, um jeden Balken anders färben zu können.

Zu allererst Code

sexgroup = df.groupby('Gender') 
female = df[(df['Gender'] == 'FEMALE')] 

macht keinen Sinn für mich machen, verwenden Sie entweder nur

female = df[(df['Gender'] == 'FEMALE')] 

oder verwenden Sie eine besser lesbare Pandas Weise

female = df.groupby('Gender').get_group('FEMALE') 

Beim Plotten Speichern Sie einfach die Rückkehr Ihres Histogrammanrufs:

counts, edges, patches = plt.hist(Female.AcctAge_Months.dropna(), bins = 50) 

Die Rückgabe von plt.hist ist ein Tupel, das Zählungen, Histogrammkanten und eine Liste der Matplotlib patch Objekte enthält, die angezeigt werden. Jetzt jede Bar individuell einzufärben, rufen Sie einfach an:

patches[0].set_color('r') 

Ich nehme an, Sie wollen eine bestimmte Farbe in Prozent von rot, gelb, grün, je nach gewissen Prozentsatz. Also statt des 'r' Parameter set_color übergeben, ein Tupel mit RGB-Werte in es passieren etwa so:

color = (0.5,0.25,0.25) 
patches[0].set_color(color) 

Aus Ihrer Frage ist es nicht klar, wie man die ‚% der Kunden in der Altersgruppe‘ zu berechnen, wie es unklar ist, was die DataFrame-Spalte AcctAge_Months ist. Ich nehme an, dass Sie einfach die Zählung jeder Dataframe-Gruppe anhand ihrer Größe, z. von df.groupby('Gender').count().

Im Grunde nur über jeden Patch des Histogramms Schleife und stellen Sie die Farbe in RGB, während der Prozentsatz jeder Farbkomponente aus Ihrem "% der Kunden in der Altersgruppe" berechnet werden muss.