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

时间:2013-01-24 14:17:19

标签: python matplotlib plot

关于如何为不在同一图上的情节创建共享轴的previous answer from tcaswell是完美的:)但我现在想知道如何禁用共享轴并重新启用它们而不必重绘或破坏任何东西? (我有多个图表,我想添加一个用户可以单击以禁用/启用这些共享轴的按钮)我找到了一种方法:

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
fig2 = plt.figure()
ax2 = fig2.add_subplot(111, sharex=ax1)

创建共享轴然后

fig2.delaxes(ax2)
ax2 = fig2.add_subplot(111)

但这需要重新绘制所有内容,可能需要一些时间。我没有找到一个简单的功能来禁用链接。有没有比我做的更轻松的方式?

谢谢!

3 个答案:

答案 0 :(得分:4)

你可以这样做:

ax2.get_shared_x_axes().remove(ax1)

参考文献:

答案 1 :(得分:3)

现在没有简单的方法可以做到这一点,但是我认为可以完成(它只需要花费一些时间来挖掘matplotlib内部)。轴在下面链接的方式是简单地为axis使用相同的定位器和格式化程序对象。要链接/取消链接,您必须复制/创建所有这些对象,并更新一些辅助结构(_shared_x_axes_shared_y_axes)。查看matplotlib.axes.Axes.cla()的实现,了解您需要做什么。

针对repo的pull request添加了此功能以及相关的feature request。如果你感到舒服a)从源b)安装使用master和c)应用这个补丁我认为开发人员会很感激你测试这个。

答案 2 :(得分:1)

您可以更改定义共享轴的图的 Grouper 对象。 x 轴的 Grouper 对象可以在 ax1._shared_x_axesax2._shared_x_axes 中找到,因为它们是同一个对象。

要停止共享两个图的 x 轴,您可以执行 ax2._shared_x_axes.remove(ax2)

要再次加入他们,请执行ax2._shared_x_axes.join(ax1,ax2)

如果您想更好地理解,可以查看文档hereax1._shared_x_axes 是一个 Grouper 对象,其中 ax1 和 ax2 是关节元素。

使用 ax2.get_shared_x_axes() 方法,您只能读取它,但不能更改它。要进行修改,您需要直接使用 ax2._shared_x_axes 访问此对象。