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


97

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_axesfig.get_axes()それらをリンクする方法がわかりません。

回答:


137

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

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つの軸間のリンクを作成し、ax1そしてax2。作成時の共有とは対照的に、軸の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()

ちなみに、奇妙な理由は、ピクルスでフィギュアを保存し、sharexプロパティを失う別のプログラムでそれらをリロードすることです。
ymmx 2017年

4
これは、選択したサブプロットを接続するのに役立ちます。たとえば、2つの時系列と2つのヒストグラムの4つのサブプロットを持つ図。これにより、時系列を選択的にリンクできます。
ハミド2017

2
ハタオブジェクトのAPIドキュメント:matplotlib.org/2.0.2/api/...
michaelosthege

3
ああ、私は軸を共有解除する方法を理解しました(これは大きなグリッドで役立つ可能性があります)-その軸上で、実行してくださいg = ax.get_shared_y_axes(); g.remove(a) for a in g.get_siblings(ax)]。出発点をありがとう!
naught1 0118年

3
@ naught101あなたはただ呼び出すことができますax2.autoscale()
ImportanceOfBeingErnest
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.