2022年1月2日更新:

# 绘制棘状图的函数
def jizhuangtu(b, colors=['#1f77b4','lightseagreen'], labels=None, title=None, text_on=True):     # 绘制棘状图的函数'''b:Serie, 由groupby(x).y.values()得到colors:list, 分类的颜色(y轴分类)labels:list, 分类的标签(y轴分类)title:标签的名称/plt.legend的参数text_on:是否添加文字标签'''fig, ax = plt.subplots()for n, value in enumerate(b.index.levels[0]):c = b[value].sort_index()c = c/c.sum()globals()['width%s'%(n+1)] = b[value].sum()/b.sum()   # 计算样本量占比 width1:男 width2:女globals()['x%s'%(n+1)] = 0 if n==0 else globals()['x%s'%n]+globals()['width%s'%(n)]/2+0.02+globals()['width%s'%(n+1)]/2 # 两个柱状图保留0.1的间隙plt.bar(globals()['x%s'%(n+1)], c.cumsum()[::-1], color=colors, width=globals()['width%s'%(n+1)])if text_on:         # 如果text_on=True, 那么添加文字标签for h, s in zip(c[::-1], c):plt.text(globals()['x%s'%(n+1)], h, format(s, '.2%') ,horizontalalignment='center', verticalalignment='bottom')plt.ylim(0,1)plt.xlim(0-width1/2, globals()['x%s'%(n+1)]+globals()['width%s'%(n+1)]/2)  # xn+widthn/2
#     xticks = [i +'({:.2%})'.format(globals()['width%s'%(n+1)]) for n, i in enumerate(b.index.levels[0])]   # 给x标签添加样本占比,添加占比太占位置了,且观看者可能难以理解plt.xticks([globals()['x%s'%(i)] for i in range(1, n+2)], b.index.levels[0])# 添加图例labels = b.index.levels[1] if labels==None else labels[plt.bar(0,0,color=colors[n], label=lab) for n,lab in enumerate(labels)]num1 = 1.01; num2 = 0.5; num3 = 3; num4 = 0plt.legend(bbox_to_anchor=(num1, num2), title=title, loc=num3, borderaxespad=num4)# 去掉边框for loc in ['top', 'left', 'bottom', 'right']:ax.spines[loc].set_visible(False)
jizhuang_data

jizhuangtu(jizhuang_data, labels=['逾期', '未逾期'])


之前的版本:

bar_data = pht.groupby('性别').是否为前线城市.value_counts().unstack().apply(lambda x: x/x.sum(), axis=1)
bar_data.plot(kind='bar', stacked=True)

bar_data


以前的版本:

写了一个可以画棘状图的函数

def jizhuangtu(b, colors=['#bebebe','#ffd700'], labels=None):     # 绘制棘状图的函数fig, ax = plt.subplots()for n, value in enumerate(b.index.levels[0]):c = b[value].sort_index()c = c/c.sum()globals()['width%s'%(n+1)] = b[value].sum()/b.sum()   # 计算样本量占比 width1:男 width2:女globals()['x%s'%(n+1)] = 0 if n==0 else globals()['x%s'%n]+globals()['width%s'%(n)]/2+0.02+globals()['width%s'%(n+1)]/2 # 两个柱状图保留0.1的间隙plt.bar(globals()['x%s'%(n+1)], c.cumsum()[::-1], color=colors, width=globals()['width%s'%(n+1)])plt.ylim(0,1)plt.xlim(0-width1/2, globals()['x%s'%(n+1)]+globals()['width%s'%(n+1)]/2)  # xn+widthn/2plt.xticks([globals()['x%s'%(i)] for i in range(1, n+2)], b.index.levels[0])# 添加图例labels = b.index.levels[1] if labels==None else labels[plt.bar(0,0,color=colors[n],label=lab) for n,lab in enumerate(labels)]num1 = 1.01; num2 = 0.5; num3 = 3; num4 = 0plt.legend(bbox_to_anchor=(num1, num2), loc=num3, borderaxespad=num4)# 去掉边框for loc in ['top', 'left', 'bottom', 'right']:ax.spines[loc].set_visible(False)
# 生成数据
by = 20; bn = 80
gy = 2; gn = 18
a = pd.DataFrame(columns=['性别','是否出险'])
a = a.append([dict(性别='男',是否出险=1)]*by, ignore_index=True)
a = a.append([dict(性别='男',是否出险=0)]*bn, ignore_index=True)
a = a.append([dict(性别='女',是否出险=1)]*gy, ignore_index=True)
a = a.append([dict(性别='女',是否出险=0)]*gn, ignore_index=True)
a = a.append([dict(性别='未知',是否出险=0)]*20, ignore_index=True)b = a.groupby('性别').是否出险.value_counts()
b

jizhuangtu(b)

修改图例

jizhuangtu(b, labels=['a','b'])

注:记得将索引补全

b
>>> 性别  是否出险   a女      0   18女     1   2未知 0   20男     0   80男     1   20

想要补全 (未知,1)

full_index = pd.MultiIndex.from_product([['男','女','未知'],[0,1]])
b = b.reindex(full_index)
b
>>>男   0    80.01    20.0女   0    18.01     2.0未知  0    20.01     NaN

画累积/叠加柱状图 https://zhuanlan.zhihu.com/p/71840687

Survived_m = train.Survived[train.Sex =='male'].value_counts()
Survived_f = train.Survived[train.Sex =='female'].value_counts()df = pd.DataFrame({u'男性':Survived_m,u'女性':Survived_f})
df.plot(kind='bar',stacked =True)
plt.title(u'按性别看获救情况')
plt.xlabel(u'性别')
plt.ylabel(u'人数')

优化上述代码(一行解决)

trainData.groupby('p1_gender').y1_is_purchase.value_counts().unstack().plot(kind='bar', stacked=True)

python matplotlib 画棘状图和叠加柱状图相关推荐

  1. python画饼图程序_python使用matplotlib画饼状图

    本文实例为大家分享了python使用matplotlib画饼状图的具体代码,供大家参考,具体内容如下 代码与详细注释 from matplotlib import pyplot as plt #调节图 ...

  2. python做房源饼状图_python使用matplotlib画饼状图

    %matplotlib inlineimport matplotlib.pyplot as plt# 121 > 1行2列第1个fig1 = plt.subplot(121)plt.pie([1 ...

  3. python画饼图存在的问题_python_使用matplotlib画饼状图(pie)

    from matplotlib import pyplot as plt #调节图形大小,宽,高 plt.figure(figsize=(6,9)) #定义饼状图的标签,标签是列表 labels = ...

  4. 【数据处理】python matplotlib 画箱线图;箱线图介绍;如何画箱线图

    一.箱线图介绍 假设一组数据有n个数,将它们从小到大排列,分为四等分.位于第25%(n+1)位置的数字是第一四分位数Q1.位于第50%(n+1)位置的数字是第二四分位数Q2,也是中位数.位于第75%( ...

  5. python matplotlib画多个图_python matplotlib模块 如何画两张图出来

    展开全部 python matplotlib模块 如何画两张图出2113来的方法:5261 代码如下所示: import numpy as np import matplotlib.pyplot as ...

  6. Python+Matplotlib绘制饼状图模拟南丁格尔玫瑰图

    开学第一课:一定不要这样问老师Python问题 董付国老师Python系列教材推荐与选用参考 ============= 版权声明:由于公众号后台规则问题,本文暂时无法设置原创标记,但仍属原创内容,微 ...

  7. python的matplotlib画饼状图

    函数: matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, ...

  8. python matplotlib画三维折线图

    from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as npX=np.array ...

  9. python matplotlib 画DW检验图自相关图

    x = np.arange(94, 105,0.1) y = stats.norm.pdf(x,100,7) #创建画布 fig = plt.figure() #使用axisartist.Subplo ...

最新文章

  1. nginx内置变量 大全
  2. 重磅!公开基于“内心对话”的EEG脑机接口数据集,助力语音意念控制研究
  3. Markdown的一些常用的语法
  4. 【Leetcode】【Medium】Rotate Image
  5. css 控制溢出文本显示省略号效果
  6. 《APUE》第6章笔记
  7. MAC系统下解决Teamviewers检测出商业限时问题
  8. Javascript 判断 object 的特定类
  9. java jdk 加密_jdk实现常见的加密算法
  10. “梅丽莎”病毒背后的神秘黑客
  11. 路由器温度测试软件,[折腾] 夏天别热晕了!自制光猫/路由器散热支架(更新温度测试)...
  12. 如何修改PDF文件的标题
  13. MySQL约束和表的复杂查询操作
  14. TensorFlow的常量、变量、常用函数(一)
  15. java后端判断图片尺寸(GB,MB,KB形式),图片色彩(黑白照或彩色照片),图片构图(横图竖图方图)
  16. Java怎样存钱利息最大_C_怎样存钱利最大
  17. flume系列之:处理flume 678M损毁文件
  18. MAC版Proxyee Down百度网盘高速下载器教程
  19. 《企业级ios应用开发实战》一2.4 搭建iOS开发环境
  20. 分布式 随笔 0-分布式服务架构

热门文章

  1. iOS设置自定义UA [NSUserDefaults standardUserDefaults] registerDefaults:@{ @UserAgent:
  2. mysql怎么禁止输出文件_MySQL禁止导出文件时写WebShell的方法 | kTWO-个人博客
  3. 讲解人工智能中的知识图谱、图灵测试以及深度学习、机器学习
  4. delete Working Copies in Xcode Source Control
  5. java jxl_Java操作Jxl实现数据交互。三部曲——《第三篇》
  6. 云原生负载均衡器之 OpenELB 中文使用指南
  7. 迈瑞监护仪对接(iMEC、PM、D系列等)
  8. 2023中南民族大学计算机考研信息汇总
  9. 各大电商平台API调用、淘宝API。1688API宝贝、商品数据详情采集
  10. linux:计划任务:单一例行性和循环例行性周期任务