web-dev-qa-db-ja.com

2つのサブプロットが作成された後、それらのx軸をどのように共有しますか?

2つのサブプロット軸を共有しようとしていますが、図の作成後に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軸を共有するコードを挿入します。どうすればそれができるのか見当がつかなかった。図軸(fig.get_axes())をチェックすると、いくつかの属性_shared_x_axesおよび_shared_x_axesがありますが、それらをリンクする方法がわかりません。

57
ymmx

軸を共有する通常の方法は、作成時に共有プロパティを作成することです。どちらか

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

または

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

したがって、作成後に軸を共有する必要はありません。

ただし、何らかの理由で、軸が作成された後に軸を共有する必要がある場合(実際には、 ここ 、または はめ込み軸の共有 が理由かもしれません)、まだ解決策があります:

を使用して

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

2つの軸ax1ax2の間にリンクを作成します。作成時の共有とは対照的に、(必要な場合)軸の1つに対して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()