You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 15:22:42