如何叠加两张X轴对齐的图表?一张为全区间,一张为子区间
叠加X轴对应图表的实现方案
核心思路
在同一坐标轴上绘制两个数据集,共享同一个X轴:test1覆盖完整X区间(1-9),test2仅绘制其子区间的对应数据点,确保X轴位置完全匹配。
代码实现
先导入所需依赖库:
import pandas as pd import matplotlib.pyplot as plt
定义示例数据:
test1 = pd.DataFrame( { 'x': [1,2,3,4,5,6,7,8,9], 'y': [0,1,1,2,1,2,1,1,1] } ) test2 = pd.DataFrame( { 'x': [1,2,4,5,8], 'y': [3,2,2,3,3] } )
方式1:折线图叠加(带标记点)
清晰展示完整区间与子区间的趋势对比:
# 创建画布与坐标轴 fig, ax = plt.subplots(figsize=(8, 5)) # 绘制完整区间的test1折线 ax.plot(test1['x'], test1['y'], marker='o', label='完整X区间数据(test1)', color='blue') # 绘制子区间的test2折线(用方形标记突出子区间点) ax.plot(test2['x'], test2['y'], marker='s', linestyle='--', label='子区间数据(test2)', color='orange', markersize=8) # 配置图表元素 ax.set_xlabel('X轴') ax.set_ylabel('Y轴') ax.set_title('完整X区间与子区间数据叠加图') ax.legend() ax.grid(alpha=0.3) plt.show()
方式2:柱状图+折线图组合
适合区分两种数据类型的场景,用双Y轴避免数值范围冲突:
fig, ax1 = plt.subplots(figsize=(8, 5)) # 左侧Y轴绘制test1的柱状图(完整区间) color = 'tab:blue' ax1.set_xlabel('X轴') ax1.set_ylabel('test1 Y值', color=color) ax1.bar(test1['x'], test1['y'], color=color, alpha=0.6, label='完整X区间数据(test1)') ax1.tick_params(axis='y', labelcolor=color) # 右侧Y轴绘制test2的折线(子区间) ax2 = ax1.twinx() color = 'tab:orange' ax2.set_ylabel('test2 Y值', color=color) ax2.plot(test2['x'], test2['y'], marker='s', color=color, linestyle='--', label='子区间数据(test2)', markersize=8) ax2.tick_params(axis='y', labelcolor=color) # 合并两侧图例 lines1, labels1 = ax1.get_legend_handles_labels() lines2, labels2 = ax2.get_legend_handles_labels() ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left') ax1.set_title('完整X区间柱状图与子区间折线图叠加') plt.show()
关键说明
- 两种方案均自动保证
test2的X点匹配到完整X轴的对应位置,无需额外对齐处理 - 可根据需求替换图表类型(如散点图、面积图),核心逻辑是在同一坐标轴(或双轴)上加载两个数据集
内容的提问来源于stack exchange,提问作者bugrahaskan
相关产品推荐
相关产品推荐

