Pandas数据分组及非数值型X轴标签柱状图绘制问题咨询
解决Pandas分组后柱状图绘制的常见问题
看起来你已经完成了数据分组的核心步骤,得到了每个LDI区间的贷款数量统计,接下来我们来优化你的柱状图绘制代码,解决可能遇到的常见问题(比如x轴标签不显示区间名称、字体过小、图表信息不完整等):
核心优化点与代码示例
你的现有分组逻辑是正确的,但绘图时没有指定x轴对应的列,导致默认用行索引作为x轴标签,这会让图表可读性变差。我们可以这样调整:
# 保留你的分组代码(已经正确实现统计逻辑) LDICount = data[data['LDI Bucket'].notnull()].groupby('LDI Bucket', as_index=False).agg({"Gross Loan Amount": "count"}) # 优化后的绘图代码 import matplotlib.pyplot as plt # 创建绘图对象,明确指定x/y轴对应的列 ax = LDICount.plot( kind='bar', x='LDI Bucket', # 让x轴直接显示LDI区间标签,替代默认的行索引 y='Gross Loan Amount', # 指定要绘制的统计数值列 title="LDI Duration Distribution", figsize=(15, 10), legend=False, # 仅一列数据,关闭图例避免冗余 fontsize=12, # 把字体调大,1号字完全无法看清 color='#3498db' # 自定义柱状图颜色,可选 ) # 补充轴标签,提升图表清晰度 ax.set_xlabel('LDI Duration Bucket', fontsize=14) ax.set_ylabel('Number of Loans', fontsize=14) ax.set_title("LDI Duration Distribution", fontsize=16, pad=20) # 在每个柱子上方显示具体数值,让数据更直观 for p in ax.patches: ax.annotate( str(p.get_height()), (p.get_x() + p.get_width() / 2., p.get_height()), ha='center', va='center', xytext=(0, 8), textcoords='offset points', fontsize=12 ) # 自动调整布局,避免文字被截断 plt.tight_layout() plt.show()
关键说明
- 指定x/y列:通过
x='LDI Bucket'让x轴直接显示你的区间标签,而不是默认的0、1、2索引值,这是提升图表可读性的核心。 - 字体调整:把
fontsize从1改成12左右,确保文字清晰可见;标题和轴标签可以单独设置更大的字号突出重点。 - 数值标注:通过
ax.annotate给每个柱子添加数值标签,让观看者直接看到每个区间的具体数量,不用再对照y轴估算。 - 图例控制:因为只有一列数据,关闭图例可以避免冗余信息。
额外注意事项
如果你的LDI区间顺序出现混乱(比如分组后变成0-3m、9m-1y、3-6m这种无序状态),可以提前对分组结果按自定义顺序排序:
import pandas as pd # 定义期望的区间顺序 bucket_order = ['0-3m', '3-6m', '6-9m', '9m-1y'] # 将LDI Bucket转为有序分类类型 LDICount['LDI Bucket'] = pd.Categorical(LDICount['LDI Bucket'], categories=bucket_order, ordered=True) # 按顺序排序 LDICount = LDICount.sort_values('LDI Bucket')
这样就能保证柱状图按你期望的时间顺序排列啦。
内容的提问来源于stack exchange,提问作者SBad
相关产品推荐
相关产品推荐

