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

直方图X轴刻度标签无法修改?如何实现按月展示累计时长

问题

我想要基于以下DataFrame绘制单个图表,X轴显示西班牙语月份标签(Ene至Dic),展示「duration」字段的累计值。但当前得到两个图表:一个带有正确月份标签但为空,另一个有所需数据但无正确标签。

样本数据

plt_users_durat.sample(5)

# 输出结果:
   month duration
2195  12   355.20
228   05   343.49
623   08   255.84
144   05   423.85
249   06   305.84

当前代码

fig, ax = plt.subplots()

# 创建示例DataFrame
plt_users_durat = df_users_durat[["month","duration"]]
plt_users_durat = pd.DataFrame(plt_users_durat).sort_values(by="month").reset_index(drop = True)

# 绘图部分
ticks = [1,2,3,4,5,6,7,8,9,10,11,12]
labs = ["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"]
plt_users_durat.plot("month", "duration", rot = 45, kind="hist")
plt.title('Minutos por Usuario al Mes')
plt.xlabel('Mes')
plt.ylabel('Duración')
ax.set_xticks(ticks)
ax.set_xticklabels(labs)
plt.show()

当前问题现象

生成两个独立图表:一个有西班牙语月份标签但无数据,另一个显示duration的数据分布但X轴为数字月份,不符合需求。


解决方法

问题根源

  1. 同时使用fig, ax = plt.subplots()创建的轴对象,以及pandas plot()默认创建的新轴,导致生成两个图表。
  2. 用直方图(hist)展示分类累计值是错误的:直方图用于展示数值型数据的分布,而你需要的是按月份分类的累计值,应该用柱状图(bar)。
  3. 原数据未按月份分组求和,直接绘图会展示单条数据的分布,而非每月累计值。

修正后的代码

import pandas as pd
import matplotlib.pyplot as plt

# 1. 数据预处理:按月份分组求和,得到每月累计duration
plt_users_durat = df_users_durat[["month","duration"]]
# 确保month是数值类型,避免字符串排序问题
plt_users_durat["month"] = pd.to_numeric(plt_users_durat["month"])
# 按月份分组求和并排序
monthly_total = plt_users_durat.groupby("month")["duration"].sum().sort_index()

# 2. 创建绘图轴对象
fig, ax = plt.subplots()

# 3. 绘制柱状图,指定使用已创建的ax,避免生成新图表
monthly_total.plot(kind="bar", rot=45, ax=ax)

# 4. 设置X轴标签为西班牙语月份
labs = ["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"]
ax.set_xticklabels(labs)

# 5. 设置图表标题和坐标轴标签
ax.set_title('Minutos por Usuario al Mes')
ax.set_xlabel('Mes')
ax.set_ylabel('Duración')

plt.tight_layout() # 自动调整布局,避免标签被截断
plt.show()

关键说明

  • 先通过groupby("month")["duration"].sum()计算每个月的累计时长,确保图表展示的是每月总和。
  • 使用ax=ax参数让pandas把图画在已创建的轴上,避免生成额外图表。
  • 用kind="bar"替换kind="hist",绘制分类柱状图而非直方图。
  • 直接用set_xticklabels替换X轴的分组标签为西班牙语月份,无需手动设置ticks。

内容的提问来源于stack exchange,提问作者RicardoDLM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:13:09