##模块导入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'Arial Unicode MS'##防止在matplotlib中中文不显示
##数据准备
df = pd.read_csv('/Users/chenxiaogang/Desktop/data.csv',encoding = 'gb2312')
data = pd.Series(df['stastic'].values, index = df['city_name'])##将目标数据导入为series元组
##数据处理
data.sort_values(ascending = False,inplace = True )##对数组进行排序,ascending 升序,inplace代表行和列的排序
p = data.cumsum()/data.sum()##cumsum:累计占比,r语言中也通用
key = p[p>0.8].index[0]##返回累计占比大于0.8的第一个索引名称
key_num = data.index.tolist().index(key)
##开始画图及结果输出
plt.figure(figsize=(80,6))
data.plot(kind = 'bar', color = 'g', alpha = 0.9, width = 0.4,rot=0)##画条形图
p.plot(style = '--ko',secondary_y = True)##画累计占比图
plt.axvline(key_num,color='r',linestyle="--",alpha=0.8) ##画红色的虚线
plt.text(key_num+0.2,p[key]-0.05,'累计占比为:%.3f%%' % (p[key]*100), color = 'r') ##在图上写文本
plt.savefig('/Users/chenxiaogang/Desktop/帕累托分布练习1.png')
效果:
版权声明:本文为weixin_44896621原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。