创建两个子图后如何共享它们的x轴?

发布于 2021-01-29 14:55:38

我正在尝试共享两个子图轴,但是在创建图形之后,我需要共享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轴。我没有发现任何线索我可以做到这一点。有一些属性
_shared_x_axes_shared_x_axes当我检查图轴(fig.get_axes())时,我不知道如何链接它们。

关注者
0
被浏览
130
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    共享轴的常用方法是在创建时创建共享属性。要么

    fig=plt.figure()
    ax1 = plt.subplot(211)
    ax2 = plt.subplot(212, sharex = ax1)
    

    要么

    fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
    

    因此,无需在创建轴之后共享轴。

    但是,如果由于某种原因需要 在创建轴后共享轴
    (实际上,使用另一个库可以创建一些子图,例如here,或者共享插入轴可能是一个原因),仍然有解决方案:

    使用

    ax1.get_shared_x_axes().join(ax1, ax2)
    

    在两个轴之间创建链接,ax1并且ax2。与创建时的共享相比,您必须为其中一个轴手动设置xticklabel(以防万一)。

    一个完整的例子:

    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()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看