1. ホーム
  2. python

[解決済み] サブプロット作成後、2つのサブプロットのX軸を共有する方法

2022-07-23 15:55:06

質問

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軸を共有するためにいくつかのコードを挿入します。 それを行うための手掛かりは見つかりませんでした。いくつかの属性があります _shared_x_axes_shared_x_axes をチェックすると、図形の軸( fig.get_axes() と表示されるのですが、どのようにリンクさせればいいのかわかりません。

どのように解決するのですか?

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

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