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

使用pandas/pyplot绘制柱状图时设置UTC时区X轴排序顺序

解决UTC时区柱状图的X轴排序问题

我刚好碰到过类似的需求,给你一套清晰的解决方案:

核心思路

value_counts(sort=False)只能按数据中首次出现的顺序排列,但我们需要强制X轴按**-11.0到+13.0的连续整数时区**排列,所以得手动构造目标顺序,再用reindex重新对齐频次数据。

具体步骤

  1. 获取时区频次(可选包含NaN)
    先拿到每个时区的频次统计,如果需要把NaN也作为一个类别统计,记得加dropna=False:

    import pandas as pd
    # 假设你的DataFrame叫df
    timezone_counts = df['UTC_Hrs'].value_counts(dropna=False)
    
  2. 构造目标X轴顺序
    生成我们想要的-11到13的浮点数列表(因为你的UTC_Hrs是浮点类型):

    # 生成-11到13的整数,再转成float匹配列类型
    desired_x_order = [float(hour) for hour in range(-11, 14)]  # range(-11,14)会包含-11到13
    
  3. 重新对齐频次数据
    用reindex把频次数据按目标顺序排列,没有数据的时区频次填0:

    ordered_counts = timezone_counts.reindex(desired_x_order, fill_value=0)
    

    如果不想显示频次为0的时区,可以再加一步过滤:

    ordered_counts = ordered_counts[ordered_counts > 0]
    
  4. 绘制柱状图
    用pandas自带的绘图或者matplotlib都可以:

    import matplotlib.pyplot as plt
    
    ordered_counts.plot(kind='bar', figsize=(12, 6))
    plt.xlabel('时区(UTC)')
    plt.ylabel('频次')
    plt.title('Twitter帖子时区分布')
    plt.xticks(rotation=0)  # 让X轴标签水平显示,更易读
    plt.show()
    

为什么之前的方法不行?

sort=False只是保留数据中时区第一次出现的顺序,但你的数据里可能不是按-11到13的顺序出现的,所以必须手动指定我们想要的顺序,reindex是最直接的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:03:02