基于数值范围创建直方图Bins的技术咨询
嘿,我懂你要的这种直方图——X轴每个刻度都对应一个明确标注成x-x格式的区间,对吧?既然你已经会画标准直方图,那调整起来其实没那么复杂,我给你说说几个常用工具的实现方法,按需选就行:
用Python Matplotlib实现
这种需求用条形图(bar plot)来实现会更灵活,毕竟我们要把每个区间当成独立的类别来展示:
方法1:直接用自定义区间和频数
如果你已经有整理好的区间标签和对应频数,直接画就行:
import matplotlib.pyplot as plt # 替换成你的区间和频数数据 bins_labels = ["0-10", "10-20", "20-30", "30-40"] freq = [12, 25, 18, 9] plt.bar(bins_labels, freq, width=0.8, color="#4287f5") plt.xlabel("数值区间") plt.ylabel("频数") plt.title("自定义区间直方图") plt.show()
方法2:从原始数据生成区间
如果只有原始数据,先手动划分区间,用Pandas给数据打标签再统计:
import pandas as pd import matplotlib.pyplot as plt # 替换成你的原始数据 raw_data = [5, 8, 12, 15, 22, 27, 33, 35, 5, 11, 23, 31] # 自定义区间边界 bin_edges = [0, 10, 20, 30, 40] # 给数据分配区间标签,include_lowest确保左边界包含在内 data_binned = pd.cut(raw_data, bins=bin_edges, include_lowest=True) # 统计每个区间的频数,按区间顺序排序 freq_counts = data_binned.value_counts().sort_index() # 绘制时把区间转换成字符串,避免显示格式问题 plt.bar(freq_counts.index.astype(str), freq_counts.values, color="#4287f5") plt.xlabel("数值区间") plt.ylabel("频数") plt.title("基于原始数据的自定义区间直方图") plt.show()
用Excel实现
Excel里不用默认的“直方图”图表,用柱形图更能控制区间显示:
- 第一步:整理数据——如果是原始数据,用
FREQUENCY函数或者数据透视表统计每个自定义区间的频数;如果已经有区间和频数,直接整理成两列(一列区间,一列频数) - 第二步:选中两列数据,插入簇状柱形图
- 第三步:选中X轴标签,把每个标签修改成
x-x的格式(比如把“0-10”直接输入) - 第四步:美化图表——调整柱形宽度、颜色,添加坐标轴标题、图表标题等
用R语言实现
R里同样用条形图来实现,两种方式:
直接用自定义区间和频数
# 替换成你的数据 bins_labels <- c("0-10", "10-20", "20-30", "30-40") freq <- c(12, 25, 18, 9) barplot(freq, names.arg = bins_labels, col = "#4287f5", xlab = "数值区间", ylab = "频数", main = "自定义区间直方图")
从原始数据生成
# 替换成你的原始数据 raw_data <- c(5, 8, 12, 15, 22, 27, 33, 35, 5, 11, 23, 31) bin_edges <- c(0, 10, 20, 30, 40) data_binned <- cut(raw_data, bin_edges, include.lowest = TRUE) freq_counts <- table(data_binned) barplot(freq_counts, col = "#4287f5", xlab = "数值区间", ylab = "频数", main = "基于原始数据的自定义区间直方图")
最后提个小提醒:这种自定义区间的“直方图”本质是类别型柱形图,和标准直方图的连续X轴逻辑不同,所以用柱形图来实现能完全控制每个区间的显示格式,更贴合你的需求~
内容的提问来源于stack exchange,提问作者VBA_Novice
相关产品推荐
相关产品推荐

