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

如何为plot(subplots=True)生成的所有子图添加十字准星?

为Pandas子图添加同步十字准星的解决办法

问题场景

我有一个生成9张子图的函数,代码如下:

df = pd.read_csv('Datasets\CSV\Data1_SetOI.csv')
features_considered = ['P','Tik','Delta_P','M','Pmin/max','V','D','OI','Sum']
features = df[features_considered]
features.index = df['Time']    
#features.head()
features.plot(subplots=True)
plt.show()

想给这些子图添加同步的十字准星,尝试了以下代码但未成功:

cursor = MultiCursor(features.canvas,  color='r',
                     lw=1,  vertOn=True)

问题原因

features是Pandas的DataFrame对象,它本身没有canvas属性;而且MultiCursor需要传入matplotlib的轴对象集合和对应画布,不能直接用DataFrame调用。

修正后的完整代码

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import MultiCursor

df = pd.read_csv('Datasets\CSV\Data1_SetOI.csv')
features_considered = ['P','Tik','Delta_P','M','Pmin/max','V','D','OI','Sum']
features = df[features_considered]
features.index = df['Time']    

# 绘制子图并获取所有子图的轴对象
axes = features.plot(subplots=True)
# 获取当前绘图的画布对象
fig = plt.gcf()
# 创建MultiCursor,关联画布和所有轴对象,实现同步十字准星
cursor = MultiCursor(fig.canvas, axes, color='r', lw=1, vertOn=True)

plt.show()

关键要点

  • 调用features.plot(subplots=True)时,直接接收返回的轴对象列表axes,这是所有子图的轴实例集合
  • 用plt.gcf()获取当前的画布(Figure)对象,这才是MultiCursor需要的canvas所属对象
  • MultiCursor的第二个参数必须传入要同步的轴对象列表,这样移动鼠标时所有子图都会显示对应的十字准星

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:39:15