2

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)

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

谢谢 !

4

3 回答 3

11

你可以做:

ax2.get_shared_x_axes().remove(ax1)

参考:

于 2018-04-10T19:42:52.727 回答
4

没有现有的简单方法可以做到这一点,但是我认为可以做到(只需深入研究matplotlib内部结构)。轴在下面链接的方式是简单地为两者使用相同的定位器和格式化器对象axis。要链接/取消链接,您必须复制/新建所有这些对象,以及更新一些辅助结构 ( _shared_x_axes, _shared_y_axes)。看看matplotlib.axes.Axes.cla()你需要做什么的一些想法的实现。

有一个针对添加此功能和相关功能请求的存储库的拉取请求。如果您愿意 a) 从源代码安装 b) 使用 master 和 c) 应用此补丁,我认为开发人员会感谢您对此进行测试。

于 2013-01-24T16:03:36.113 回答
1

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

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

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

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

With the ax2.get_shared_x_axes() method you just can read it, but not change it. For aplying modifications, you need to access this object directly with ax2._shared_x_axes.

于 2021-06-08T13:08:29.693 回答