我有一个csv数据集,如下所示:
Account Months_since_Open Gender Age_Group
XXXXX 12 Male Millennial
YYYYY 24 Female 71+
ZZZZZ 20 Female 55-70
数据集持续数百万行。基本上我想要一个条形图,它在x轴上有Months_Since_Open,在Y轴上有一个帐户数(频率)。此外,我希望这些酒吧按年龄组着色。
到目前为止,这就是我所拥有的:
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)
我如何通过年龄组中客户的百分比来显示这些条形图?我正在使用python 3.4.4谢谢
答案 0 :(得分:1)
您需要从matplotlib返回并保存直方图,以便能够以不同方式为每个条形图着色。
首先,您的代码
sexgroup = df.groupby('Gender')
female = df[(df['Gender'] == 'FEMALE')]
对我来说没有意义,要么只是使用
female = df[(df['Gender'] == 'FEMALE')]
或使用更可读的熊猫方式
female = df.groupby('Gender').get_group('FEMALE')
绘图时,只需保存histgram调用的返回值:
counts, edges, patches = plt.hist(Female.AcctAge_Months.dropna(), bins = 50)
plt.hist
的返回是一个包含计数,直方图边缘和显示的matplotlib patch
对象列表的元组。现在单独为每个条形图着色,只需调用:
patches[0].set_color('r')
我假设你想要一个特定的颜色,红色,黄色,绿色的百分比,取决于一些百分比。因此,不是传递给'r'
的{{1}}参数,而是传递一个带有RGB值的元组,如下所示:
set_color
从您的问题来看,目前尚不清楚如何计算“年龄组中客户的百分比”,因为目前还不清楚DataFrame列color = (0.5,0.25,0.25)
patches[0].set_color(color)
是什么。我假设你只是将每个DataFrame组的数量除以它的大小,例如来自AcctAge_Months
。
基本上,只需循环遍历直方图的每个色块并将颜色设置为RGB,而每个颜色分量的百分比必须根据“年龄组中的客户百分比”计算。