如何在pandas中基于单列不同值区间创建饼图?
pandas基于单列数值区间分箱绘制饼图
实现整体分为三步:加载/构造数据、按指定规则对数值列分箱打分类标签、统计各分类计数后绘制饼图。
完整实现代码
import pandas as pd import matplotlib.pyplot as plt # 1. 构造示例数据 df = pd.DataFrame({ 'City': ['abc', 'mno', 'xyz', 'uvw', 'def'], 'Population': [5000, 2000, 7000, 9000, 11000] }) # 2. 按人口区间规则分箱 # 定义区间边界:负无穷到5000,5000到10000,10000到正无穷 bins = [-float('inf'), 5000, 10000, float('inf')] category_labels = [ 'underpopulated(人口不足)', 'moderate-populated(人口适中)', 'overpopulated(人口过剩)' ] # right=False设置区间为左闭右开,匹配规则 [负无穷,5000)、[5000,10000)、[10000,正无穷) # 若需要严格遵循「<5000、5000<P<10000、>10000」的规则(排除等于5000、10000的边界值),可先过滤掉Population等于边界值的行再分箱 df['pop_category'] = pd.cut( df['Population'], bins=bins, labels=category_labels, right=False ) # 3. 统计各分类数量并绘制饼图 category_stats = df['pop_category'].value_counts() plt.figure(figsize=(6, 6)) plt.pie( category_stats, labels=category_stats.index, autopct='%1.1f%%', # 饼图显示百分比 startangle=90 ) plt.axis('equal') # 强制饼图为正圆形 plt.title('城市人口区间分布') plt.show()
运行结果说明
基于提供的示例数据运行后,各分类统计结果如下:
- underpopulated(人口不足):共1个城市(mno,人口2000)
- moderate-populated(人口适中):共3个城市(abc、xyz、uvw,因左闭右开规则5000被划入该分类,可根据实际业务需求调整边界包含逻辑)
- overpopulated(人口过剩):共1个城市(def,人口11000)
内容的提问来源于stack exchange,提问作者Kartikey
相关产品推荐
相关产品推荐

