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

绘制Datetime索引三变量折线图时单个变量呈水平直线问题

问题描述

我想绘制三个变量的折线图,三个变量单独绘制时均呈现曲线,但将它们放在同一张图中绘制时,其中一个变量显示为平行于x轴的直线。三个数据集的索引均为日期时间(Datetime)格式,效果截图及代码如下:

折线图异常效果

plt.figure(figsize=(16, 8), dpi=150)
  
nig_confz['count'].plot(label='confirmed', color='orange', linewidth=3)
nig_recovs['count'].plot(label='recovered',linewidth=3)
nig_deaths['count'].plot(label='deaths',color='green',linewidth=3)

plt.xlabel('Date')
  
plt.legend()
解决方案

出现这种问题主要有两种常见原因,对应解决方法如下:

1. 数值量级差异过大

如果其中一个变量的数值远小于另外两个(比如死亡数远低于确诊数),线性坐标轴会把小数值的波动压缩成近似直线。可以通过两种方式解决:

  • 双y轴展示:给小量级数据分配右侧独立y轴,避免被大数值覆盖:
    plt.figure(figsize=(16, 8), dpi=150)
    
    # 主坐标轴绘制确诊和康复数据
    ax1 = plt.gca()
    nig_confz['count'].plot(ax=ax1, label='confirmed', color='orange', linewidth=3)
    nig_recovs['count'].plot(ax=ax1, label='recovered', linewidth=3)
    ax1.set_xlabel('Date')
    ax1.set_ylabel('Confirmed/Recovered Count')
    
    # 次坐标轴绘制死亡数据
    ax2 = ax1.twinx()
    nig_deaths['count'].plot(ax=ax2, label='deaths', color='green', linewidth=3)
    ax2.set_ylabel('Deaths Count')
    
    # 合并两个坐标轴的图例
    lines1, labels1 = ax1.get_legend_handles_labels()
    lines2, labels2 = ax2.get_legend_handles_labels()
    ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')
    
  • 对数坐标轴:适合数值差异极大的场景,能放大小数值的波动:
    plt.figure(figsize=(16, 8), dpi=150)
    
    nig_confz['count'].plot(label='confirmed', color='orange', linewidth=3)
    nig_recovs['count'].plot(label='recovered',linewidth=3)
    nig_deaths['count'].plot(label='deaths',color='green',linewidth=3)
    
    plt.xlabel('Date')
    plt.yscale('log')  # 启用对数y轴
    plt.legend()
    

2. 日期索引未对齐

三个数据集的日期索引可能存在缺失、错位或不匹配,导致绘图时自动补全为固定值。可以先验证并对齐索引:

# 检查三个数据集的索引是否完全一致
print(nig_confz.index.equals(nig_recovs.index))
print(nig_confz.index.equals(nig_deaths.index))

# 如果索引不一致,合并数据时自动对齐
merged_df = pd.concat(
    [nig_confz['count'], nig_recovs['count'], nig_deaths['count']],
    axis=1,
    keys=['confirmed', 'recovered', 'deaths']
)
merged_df.plot(figsize=(16, 8), dpi=150, linewidth=3)
plt.xlabel('Date')
plt.legend()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:30:39