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

如何使用Python和matplotlib在子图中绘制多条线并绑定多列dataframe

实现方法

pandas内置的plot方法支持指定目标axes对象,你不需要修改原方案的子图创建逻辑,直接把多列DataFrame绘制到对应子图的ax上即可,步骤如下:

  1. 先按照原方案的结构创建共享x轴的子图对象,同时提前整理好对应子图的数据集:
import matplotlib.pyplot as plt
import pandas as pd

# 示例数据集结构,索引为日期格式,列对应每个要绘制的线条
# 顶部子图数据集:包含IBM股价、30日移动平均线两列
top_df = pd.DataFrame({
    "IBM股价": ibm_close_series,
    "30日移动平均线": ma_30_series
}, index=date_index)
# 底部子图数据集:包含30日方差、180日方差两列
bottom_df = pd.DataFrame({
    "30日方差": vol_30_series,
    "180日方差": vol_180_series
}, index=date_index)

# 创建共享x轴的双行子图,和原方案结构完全一致
fig, (ax0, ax1) = plt.subplots(nrows=2, ncols=1, sharex=True, figsize=(10,7))
  1. 调用对应DataFrame的plot方法,通过ax参数指定要绘制到的子图对象,pandas会自动把所有列绘制成独立线条,索引作为x轴:
# 顶部子图绘制两条线
top_df.plot(ax=ax0)
# 底部子图绘制两条线
bottom_df.plot(ax=ax1)
  1. 如果需要和原方案一样拿到单个线条对象做样式调整,直接从ax.lines属性按列顺序取即可:
# 顺序和DataFrame的列顺序一一对应
line_price, line_ma30 = ax0.lines
line_vol30, line_vol180 = ax1.lines

# 可直接调整线条属性,和原方案的操作逻辑完全兼容
line_price.set_color("darkblue")
line_ma30.set_color("orange")
补充说明
  • 你也可以直接在plot方法中统一设置线条样式,比如top_df.plot(ax=ax0, color=["darkblue", "orange"], linewidth=2),无需后续单独调整
  • 原方案的共享x轴逻辑完全不受影响,pandas会自动对齐两个DataFrame的日期索引,x轴仅在底部显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:02