如何用Python的pandas.plot自定义直方图X轴非等距区间?
如何为Pandas直方图设置自定义区间?
没问题,要实现你需要的自定义区间直方图其实很简单,我给你两种实用的方法,都能完美匹配你的需求:
方法一:先分箱再绘制柱状图(直观可控)
这种方法先把数据按你的自定义区间分组,再统计每组的数量绘制柱状图,好处是能清晰看到每个区间的具体计数,x轴直接显示区间标签。
步骤:
- 定义你的自定义区间边界
- 使用
pd.cut()将数据分到对应的区间里 - 统计每个区间的数量并绘制柱状图
完整代码示例:
import pandas as pd import matplotlib.pyplot as plt import numpy as np # 生成示例数据(替换成你自己的DataFrame即可) df = pd.DataFrame({'A': np.random.uniform(0, 500, 1000)}) # 定义你需要的自定义区间 custom_bins = [0, 20, 40, 60, 80, 100, 500] # 对A列进行分箱,include_lowest=True确保0被包含在第一个区间里 df['A_binned'] = pd.cut(df['A'], bins=custom_bins, include_lowest=True) # 绘制分布柱状图,sort_index保证区间按顺序显示 df['A_binned'].value_counts().sort_index().plot( kind='bar', title='Custom Interval Distribution', edgecolor='black', # 添加边框区分每个柱子 figsize=(8, 5) ) plt.xlabel('Interval') plt.ylabel('Number of Samples') plt.show()
方法二:直接在直方图中指定bins参数(简洁高效)
如果你不想新增列,可以直接把自定义区间传给plot(kind='hist')的bins参数,一步生成符合要求的直方图。
完整代码示例:
import pandas as pd import matplotlib.pyplot as plt import numpy as np # 生成示例数据(替换成你自己的DataFrame即可) df = pd.DataFrame({'A': np.random.uniform(0, 500, 1000)}) # 定义自定义区间 custom_bins = [0, 20, 40, 60, 80, 100, 500] # 直接绘制自定义区间的直方图 df['A'].plot( kind='hist', bins=custom_bins, edgecolor='black', # 添加边框区分区间 title='Custom Interval Histogram', figsize=(8, 5) ) plt.xlabel('Value of Column A') plt.ylabel('Count') plt.show()
注意事项:
include_lowest=True:在方法一中必须加上这个参数,因为pd.cut()默认是左开右闭区间,不加的话等于0的数据会被分到NaN里,无法统计。edgecolor='black':添加这个参数可以让每个区间的边界更清晰,避免柱子连在一起分不清区间。
内容的提问来源于stack exchange,提问作者ggupta
相关产品推荐
相关产品推荐

