如何使用 matplotlib 启用/禁用轻松共享的轴

Jda*_*eer 2 python plot matplotlib

从tcaswell以前的答案如何为地块不属于同一人物创建共享轴是完美的:)但现在我不知道如何禁用共享轴和重新启用它们,而不必重新绘制或破坏任何东西?(我有多个图形,我想添加一个按钮,用户可以单击该按钮以禁用/启用这些共享轴)我找到了一种方法:

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
fig2 = plt.figure()
ax2 = fig2.add_subplot(111, sharex=ax1)
Run Code Online (Sandbox Code Playgroud)

创建共享轴,然后

fig2.delaxes(ax2)
ax2 = fig2.add_subplot(111)
Run Code Online (Sandbox Code Playgroud)

but this require to redraw everything and can take some times. I didnt find a simple function to disable the link. Is there a lighter way than what I did ?

Thanks !

EEE*_*EEE 11

你可以做:

ax2.get_shared_x_axes().remove(ax1)
Run Code Online (Sandbox Code Playgroud)

参考:

  • 现在,这在 matplotlib 3.6 中已弃用。当前的预期方法是什么? (4认同)
  • 另外,当使用“sharex”和/或“sharey”选项创建子图时,例如“fig,axes = plt.subplots(nrows = 3,ncols = 3,sharex = True,sharey = True)”,“ax2.get_shared_x_axes” ()` 包含*所有*轴的列表。因此,需要为每个轴执行“ax12.get_shared_x_axes().remove(axis)”。或者更好的“[ax12.get_shared_x_axes().remove(axis) for axis inaxes.ravel()]”。我分享这个是因为我花了不止一次的尝试:`ax12.get_shared_x_axes()`实际上不是一个列表,而是一个`Grouper`对象+`axes`是一个多维numpy数组。您可以考虑将其添加到您的答案中@EEE;) (2认同)