python柱状图加百分比_【python】封装接口直接利用DataFrame绘制百分比柱状图

本文介绍了如何在Python中创建百分比柱状图,包括官方示例代码解析和问题解决过程。通过提供的函数`percentage_bar`,可以直接利用DataFrame绘制柱状图并显示每个部分的百分比。

手动反爬虫:原博地址

知识梳理不易,请尊重劳动成果,文章仅发布在优快云网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息

1. 背景前言

最近打比赛遇到的问题有点多,在绘制了堆叠柱状图之后,队长说不仅要看到具体的数量多少的堆叠图,还要看到具体占比的百分比柱状图,具体的样例可参考灵魂画图,因此也就产生了绘制百分比柱状图的需求

77069c2701d62619dc475c30e2b05578.png

2. 官方网址示例

2.1 matplotlib_percentage_stacked_bar_plot

里面的代码是真的长,完全属于一步步进行“堆砖块”然后才形成的百分比堆叠图,最终得出图结果如下:

33526a292c27a6e21aa79090eabbc557.png

2.2 percent-stacked-barplot

这个网址给出的代码比第一个网址给出的较为简洁,但是本质上都是属于一个个“砖块”的叠加,代码及生成的示例图形如下:

# libraries

import numpy as np

import matplotlib.pyplot as plt

from matplotlib import rc

import pandas as pd

# Data

r = [0,1,2,3,4]

raw_data = {'greenBars': [20, 1.5, 7, 10, 5], 'orangeBars': [5, 15, 5, 10, 15],'blueBars': [2, 15, 18, 5, 10]}

df = pd.DataFrame(raw_data)

# From raw value to percentage

totals = [i+j+k for i,j,k in zip(df['greenBars'], df['orangeBars'], df['blueBars'])]

greenBars = [i / j * 100 for i,j in zip(df['greenBars'], totals)]

orangeBars = [i / j * 100 for i,j in zip(df['orangeBars'], totals)]

blueBars = [i / j * 100 for i,j in zip(df['blueBars'], totals)]

# plot

barWidth = 0.85

names = ('A','B','C','D','E')

# Create green Bars

plt.bar(r, greenBars, color='#b5ffb9', edgecolor='white', width=barWidth)

# Create orange Bars

plt.bar(r, orangeBars, bottom=greenBars, color='#f9bc86', edgecolor='white', w

import pandas as pd import matplotlib.pyplot as plt def plot_data_analysis(df, plot_type, column=None, by_column=None, stacked=False): “”" 数据分析绘图函数 参数: - df: 输入的数据框 (pandas DataFrame) - plot_type: 图表类型(如'pie', 'hist', 'box', 'kde', 'bar') - column: 要绘制的列名 (str) - by_column: 分组依据的列名(适用于箱线图和堆叠柱状图) (str) - stacked: 是否堆叠(适用于堆叠柱状图,默认为False) (bool) """ # 根据不同的图表类型进行分支处理 if plot_type == 'pie': # 饼图:统计指定列的值分布,并绘制饼图 counts = df[column].value_counts() # 统计该列中每个值的数量 labels = counts.index # 获取值作为标签 plt.figure(figsize=(6, 6)) # 设置图形大小 plt.pie(counts, labels=labels, autopct='%1.1f%%', startangle=90) # 绘制饼图,显示百分比 plt.title(f"{column} 饼图") # 设置标题 elif plot_type == 'hist': # 直方图:绘制指定列的频数分布 plt.figure(figsize=(8, 5)) # 设置图形大小 plt.hist(df[column], bins=10, color='blue', alpha=0.7) # 绘制直方图,设置颜色和透明度 plt.title(f"{column} 直方图") # 设置标题 plt.xlabel(column) # 设置x轴标签 plt.ylabel('频数') # 设置y轴标签 elif plot_type == 'box': # 箱线图:绘制指定列与分组列的关系 plt.figure(figsize=(8, 5)) # 设置图形大小 df.boxplot(column=column, by=by_column, grid=False) # 绘制箱线图,按by_column分组 plt.title(f"{column} 与 {by_column} 关系") # 设置标题 elif plot_type == 'kde': # 密度图:绘制指定列的概率密度分布 plt.figure(figsize=(8, 5)) # 设置图形大小 df[column].plot(kind='kde', color='red') # 绘制密度图,设置颜色 plt.title(f"{column} 密度分布") # 设置标题 plt.xlabel(column) # 设置x轴标签 elif plot_type == 'bar': # 堆叠柱状图绘制指定列与分组列的交叉关系 crosstab_data = pd.crosstab(df[column], df[by_column]) # 创建交叉表 crosstab_data.plot(kind='bar', stacked=stacked, figsize=(10, 6)) # 绘制堆叠柱状图 plt.title(f"{column} 与 {by_column} 对比图") # 设置标题 plt.xlabel(column) # 设置x轴标签 plt.ylabel('频数') # 设置y轴标签 else: # 如果传入不支持的图表类型,打印错误信息 print("不支持的图表类型") return # 自动调整布局并显示图形 plt.tight_layout() plt.show() (2)调用示例 示例 1:预定是否取消占比饼图 Python 绘制饼图,查看booking_status列的值分布 plot_data_analysis(df, plot_type=‘pie’, column=‘booking_status’) 解释: plot_type=‘pie’:指定绘制饼图。 column=‘booking_status’:指定要统计的列是booking_status。 示例 2:成人数量频数图 Python 绘制直方图,查看no_of_adults列的频数分布 plot_data_analysis(df, plot_type=‘hist’, column=‘no_of_adults’) 解释: plot_type=‘hist’:指定绘制直方图。 column=‘no_of_adults’:指定要绘制的列是no_of_adults。 示例 3:成人数量与预定状态对比图 Python 绘制箱线图,查看no_of_adults与booking_status的关系 plot_data_analysis(df, plot_type=‘box’, column=‘no_of_adults’, by_column=‘booking_status’) 解释: plot_type=‘box’:指定绘制箱线图。 column=‘no_of_adults’:指定要绘制的列是no_of_adults。 by_column=‘booking_status’:指定按booking_status分组。 示例 4:房间平均价格密度分布图 Python 绘制密度图,查看avg_price_per_room列的概率密度分布 plot_data_analysis(df, plot_type=‘kde’, column=‘avg_price_per_room’) 解释: plot_type=‘kde’:指定绘制密度图。 column=‘avg_price_per_room’:指定要绘制的列是avg_price_per_room。 示例 5:新老顾客是否取消频数图 Python 绘制堆叠柱状图,查看repeated_guest与booking_status的关系 plot_data_analysis(df, plot_type=‘bar’, column=‘repeated_guest’, by_column=‘booking_status’, stacked=True) 解释: plot_type=‘bar’:指定绘制堆叠柱状图。 column=‘repeated_guest’:指定要绘制的列是repeated_guest。 by_column=‘booking_status’:指定按booking_status分组。 stacked=True:指定堆叠模式。 解释 通过将所有绘图逻辑封装到一个函数中,我们实现了以下目标: 通用性:支持多种图表类型(饼图、直方图、箱线图、密度图、堆叠柱状图)。 灵活性:用户可以通过传递参数灵活选择要绘制的列和图表类型。 可扩展性:可以轻松添更多图表类型或功能。 修改完善代码,输出的图表名字是中文并且不要出现乱码,需要有详细注释i
最新发布
06-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值