如何用Python Pandas绘制价格占比直方图(附示例数据)
绘制价格区间占比的横向直方图
数据准备
先把你的表格数据整理成可处理格式,用Python的pandas加载:
import pandas as pd # 构造数据 data = { 'item': ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'], 'CAR_PRIC1': [17400.00, 35450.00, 55780.00, 78500.00, 25609.55, 96000.00], 'Car_PRICE2': [18400.00, 27400.00, 57400.00, 37400.00, 77400.00, 97400.00] } df = pd.DataFrame(data)
合并价格数据
将两列价格合并,统计所有订单的价格分布:
# 合并两列价格,得到全部订单的价格列表 all_prices = pd.concat([df['CAR_PRIC1'], df['Car_PRICE2']], ignore_index=True) total_orders = len(all_prices) # 总订单数
定义价格区间
根据数据范围自定义区间,这里按2万为间隔划分:
# 定义价格区间与对应标签 bins = [0, 20000, 40000, 60000, 80000, 100000] labels = ['0-2万', '2-4万', '4-6万', '6-8万', '8-10万'] # 对所有价格做区间分组 price_bins = pd.cut(all_prices, bins=bins, labels=labels, right=False)
计算区间占比
统计各区间订单数,转换为百分比:
# 统计区间订单数,计算占比(保留两位小数) bin_counts = price_bins.value_counts().sort_index() bin_percentages = (bin_counts / total_orders * 100).round(2)
绘制横向直方图
用matplotlib生成符合要求的图形:
import matplotlib.pyplot as plt plt.figure(figsize=(8, 5)) # 绘制横向条形图(对应需求的直方图效果) bars = plt.barh(bin_percentages.index, bin_percentages.values, color='#1f77b4') # 给条形添加百分比标签 for bar in bars: width = bar.get_width() plt.text(width + 0.5, bar.get_y() + bar.get_height()/2, f'{width}%', ha='left', va='center') # 设置坐标轴与标题 plt.xlabel('订单占总订单的百分比') plt.ylabel('价格区间') plt.title('各价格区间订单占比分布') plt.xlim(0, max(bin_percentages.values) + 5) # 预留空间显示标签 plt.tight_layout() plt.show()
效果说明
运行代码后会生成横向直方图:Y轴为自定义的价格区间,X轴为对应区间的订单占比,每个条形旁标注具体百分比数值。若需调整区间划分,修改bins和labels参数即可。
内容的提问来源于stack exchange,提问作者sahel
相关产品推荐
相关产品推荐

