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

不同频率pandas时间序列合并绘制折线与分组柱状图问题问询

不同频率时间序列合并绘制折线+分组柱状图解决方案

问题根源

你当前的显示异常核心原因是两个子图使用了完全不匹配的X轴坐标体系:折线图的X轴是实际日期格式的连续刻度,而你绘制柱状图时用np.arange(len(date_operations_monthly))生成了0~106的整数索引作为X轴,两者没有对应关系,所以合并后显示错乱。

解决方案

统一使用datetime类型作为两个图表的X轴坐标,让月度数据的柱状图直接映射到实际日期位置上即可,具体实现代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np

# 第一步:先把所有日期列统一转换为pandas datetime格式
df1['Date'] = pd.to_datetime(df1['Date'])
df2['Date'] = pd.to_datetime(df2['Date'])

# 第二步:绘制日度汇率折线图,保留datetime格式的X轴
fig, ax1 = plt.subplots(figsize=(15,6))
ax1.plot(df1['Date'], df1['exchange_rate_daily'], color="k", label="Exchange rate (daily)", linewidth=2)
ax1.set_ylabel('Daily Exchange Rate', fontsize=12)
ax1.legend(loc = "upper left")

# 第三步:绘制月度分组柱状图,直接用月度日期做X轴,调整偏移量适配日期轴
# 日期轴默认单位是天,柱子宽度设为12天,两个柱子分别向月度日期前后偏移6天避免重叠
ax2 = ax1.twinx()
width = 12
rects1 = ax2.bar(df2['Date'] - pd.Timedelta(days=6), df2['intervention_monthly'], width=width, label='Intervention (monthly)', color='#ff7f0e')
rects2 = ax2.bar(df2['Date'] + pd.Timedelta(days=6), df2['client_monthly'], width=width, label='Client operation (monthly)', color='#2ca02c')
ax2.set_ylabel('Monthly Operation Value', fontsize=12)
ax2.legend(loc = "upper right")

# 可选:优化X轴刻度显示,避免标签拥挤
ax1.xaxis.set_major_locator(mdates.MonthLocator())
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
plt.xticks(rotation=70)
plt.tight_layout()
plt.show()

注意事项

如果你的数据时间跨度较大,可以适当调整柱子宽度和偏移量,也可以把X轴主刻度修改为季度/年度显示,进一步优化可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:15:08