如何为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
相关产品推荐
相关产品推荐

