Pandas分组直方图x轴小数刻度修复及简化分组绘图方法咨询
解决Pandas分组直方图的x轴整数刻度问题,附更简便实现方式
首先,针对你当前遇到的x轴刻度显示小数的问题,我们可以通过手动设置每个子图的x轴刻度来解决。你当前的代码生成的是一组子图,我们可以获取这些子图的axes对象,然后为每个子图指定整数刻度:
import pandas as pd import matplotlib.pyplot as plt # 假设你的df已经存在 axes = df.Rank.hist(by=df['code'], figsize=(10,10)) # 获取Rank列的整数范围 rank_min = df['Rank'].min() rank_max = df['Rank'].max() # 遍历每个子图,设置x轴刻度为整数 for ax in axes.flat: ax.set_xticks(range(rank_min, rank_max + 1)) # 可选:让刻度标签居中对齐,更美观 ax.set_xticks([x + 0.5 for x in range(rank_min, rank_max)], minor=True) ax.tick_params(axis='x', which='minor', bottom=False) plt.tight_layout() plt.show()
这样就能让每个子图的x轴显示完整的整数刻度,和你提到的LP_DEBTC图效果一致。
更简便的分组直方图实现方式
其实你可以用seaborn库来实现更简洁、更灵活的分组直方图,代码量更少,而且对刻度的控制也更直观:
import seaborn as sns import matplotlib.pyplot as plt # 使用displot直接生成分组直方图 g = sns.displot(data=df, x='Rank', col='code', col_wrap=2, # col_wrap控制每行子图数量 bins=range(df['Rank'].min(), df['Rank'].max() + 2), # 确保每个整数对应一个bin height=5, aspect=1) # 设置x轴刻度为整数 g.set(xticks=range(df['Rank'].min(), df['Rank'].max() + 1)) plt.tight_layout() plt.show()
这种方式的优势在于:
- 代码更简洁,不需要手动遍历子图
- 可以通过
col_wrap轻松控制子图的排列方式 bins参数直接指定为整数范围,确保每个整数都被正确分组
另外,如果你还是想用纯Pandas的方式,也可以在调用hist()时指定bins参数为整数范围,从根源上让直方图区间对齐整数:
axes = df.Rank.hist(by=df['code'], figsize=(10,10), bins=range(df['Rank'].min(), df['Rank'].max() + 2)) # 再设置x轴刻度 for ax in axes.flat: ax.set_xticks(range(df['Rank'].min(), df['Rank'].max() + 1)) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者amestrian
相关产品推荐
相关产品推荐

