我试图共享两个子图轴,但我需要在创建图形后共享x轴。 所以,例如,我创建了这个数字:
import numpy as np
import matplotlib.pyplot as plt
t= np.arange(1000)/100.
x = np.sin(2*np.pi*10*t)
y = np.cos(2*np.pi*10*t)
fig=plt.figure()
ax1 = plt.subplot(211)
plt.plot(t,x)
ax2 = plt.subplot(212)
plt.plot(t,y)
# some code to share both x axis
plt.show()
我会插入一些代码来共享两个x轴而不是注释。
我没有找到任何线索如何做到这一点。有一些属性
{i> _shared_x_axes
和_shared_x_axes
当我查看轴(fig.get_axes()
)时,我不知道如何链接它们。
答案 0 :(得分:66)
共享轴的常用方法是在创建时创建共享属性。任
fig=plt.figure()
ax1 = plt.subplot(211)
ax2 = plt.subplot(212, sharex = ax1)
或
fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
因此无需在创建轴之后共享轴。
但是,如果出于任何原因,您需要在创建轴之后共享轴(实际上,使用创建一些子图的其他库,例如here或{{3}可能是一个原因),仍然会有一个解决方案:
使用
ax1.get_shared_x_axes().join(ax1, ax2)
在两个轴ax1
和ax2
之间创建链接。与创建时的共享相比,您必须手动为其中一个轴设置xticklabels(如果需要)。
一个完整的例子:
import numpy as np
import matplotlib.pyplot as plt
t= np.arange(1000)/100.
x = np.sin(2*np.pi*10*t)
y = np.cos(2*np.pi*10*t)
fig=plt.figure()
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)
ax1.plot(t,x)
ax2.plot(t,y)
ax1.get_shared_x_axes().join(ax1, ax2)
ax1.set_xticklabels([])
# ax2.autoscale() ## call autoscale if needed
plt.show()
答案 1 :(得分:3)
从 Matplotlib v3.3 开始,现在存在 Axes.sharex
、Axes.sharey
方法:
ax1.sharex(ax2)
ax1.sharey(ax3)
答案 2 :(得分:0)
只是为了补充上面的ImportanceOfBeingErnest的回答:
如果您有一整个 list
轴对象,您可以一次传递它们,并通过像这样解包列表来共享它们的轴:
ax_list = [ax1, ax2, ... axn] #< your axes objects
ax_list[0].get_shared_x_axes().join(*ax_list)
以上将所有这些链接在一起。当然,您可以发挥创意并将您的 list
设置为仅链接其中的一部分。
注意:
为了将所有 axes
链接在一起,您必须在调用中包含 axes_list
的第一个元素,尽管您在第一个调用 .get_shared_x_axes()
元素开始!
这样做,这肯定是合乎逻辑的:
ax_list[0].get_shared_x_axes().join(*ax_list[1:])
... 将导致将所有 axes
对象链接在一起除了第一个对象,第一个对象将保持完全独立于其他对象。