如何使用Python绘制x轴为数值区间、y轴为区间计数的柱状图
数值区间分组统计及柱状图绘制实现方案
以下基于Python给出可直接运行的实现,支持自定义区间参数。
方案1:基于pandas+matplotlib实现(推荐,代码更简洁)
依赖安装
如果没有安装对应库,先执行安装命令:
pip install pandas matplotlib
完整实现代码
import pandas as pd import matplotlib.pyplot as plt # 输入数值列表 values = [0.2, 0.4, 1.2, 2.4, 5.4, 6.0, 0.3, 3.4] # -------------------------- 自定义区间配置,可按需调整 -------------------------- # 方式1:等步长区间配置 bin_start = 0 # 区间起始值 bin_end = 6 # 区间结束值 bin_step = 1 # 区间步长 bins = list(range(bin_start, bin_end + bin_step, bin_step)) # 方式2:自定义非等步长区间,直接修改bins即可,例如: # bins = [0, 2, 5, 10] # ----------------------------------------------------------------------------- # 生成区间展示标签 bin_labels = [f"{bins[i]}-{bins[i+1]}" for i in range(len(bins)-1)] # 分组统计各区间数值数量,此处规则为左闭右闭,可通过调整cut参数修改区间开闭规则 count_series = pd.cut( values, bins=bins, labels=bin_labels, include_lowest=True, right=True ).value_counts().sort_index() # 输出你需要的字典格式统计结果 count_dict = count_series.to_dict() print(count_dict) # 绘制柱状图 plt.figure(figsize=(8, 5)) count_series.plot(kind='bar') # 图表配置 plt.xlabel('区间范围') plt.ylabel('no_of_values') plt.xticks(rotation=0) # 显示每个柱子的数值标签 for idx, num in enumerate(count_series): plt.text(idx, num + 0.05, str(num), ha='center') plt.tight_layout() plt.show()
运行后输出的统计结果为{'0-1': 3, '1-2': 1, '2-3': 1, '3-4': 1, '4-5': 0, '5-6': 2},与示例要求一致。
方案2:纯Python实现(无需第三方依赖)
仅需Python原生环境即可完成分组统计:
values = [0.2, 0.4, 1.2, 2.4, 5.4, 6.0, 0.3, 3.4] # 自定义区间 bins = [0, 1, 2, 3, 4, 5, 6] bin_labels = [f"{bins[i]}-{bins[i+1]}" for i in range(len(bins)-1)] # 初始化计数字典 count_dict = {label: 0 for label in bin_labels} # 遍历统计 for val in values: for i in range(len(bins)-1): # 区间判断规则:左闭右闭,可按需修改 if bins[i] <= val <= bins[i+1]: count_dict[bin_labels[i]] += 1 break print(count_dict)
统计完成后可自行选择可视化工具绘制柱状图。
内容的提问来源于stack exchange,提问作者Shreehari W
相关产品推荐
相关产品推荐

