Oluşturulduktan sonra iki alt parçanın x eksenini nasıl paylaşırsınız?


97

İki alt grafik eksenini paylaşmaya çalışıyorum, ancak şekil oluşturulduktan sonra x eksenini paylaşmam gerekiyor. Yani mesela şu rakamı yaratıyorum:

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

Yorum yerine, her iki x eksenini paylaşmak için bazı kodlar eklerdim. Bunu nasıl yapabileceğime dair hiçbir fikrim yoktu. Orada bazı nitelikleridir _shared_x_axesve _shared_x_axesben rakam eksenine kontrol ederken ( fig.get_axes()) ama bunları bağlamak için nasıl bilmiyorum.

Yanıtlar:


137

Eksenleri paylaşmanın olağan yolu, paylaşılan özellikleri yaratma sırasında oluşturmaktır. Ya

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

veya

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

Eksenleri oluşturulduktan sonra paylaşmak bu nedenle gerekli olmamalıdır.

Ancak herhangi bir nedenle eksenleri oluşturulduktan sonra paylaşmanız gerekirse (aslında burada olduğu gibi bazı alt noktalar oluşturan farklı bir kitaplık kullanmak veya ek eksenleri paylaşmak bir sebep olabilir), yine de bir çözüm olacaktır:

Kullanma

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

iki eksen arasında bir bağlantı oluşturur ax1ve ax2. Oluşturma sırasındaki paylaşımın aksine, eksenlerden biri için xticklabel'leri manuel olarak kapatmanız gerekecektir (istenmesi durumunda).

Tam bir örnek:

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

Bu arada tuhaf sebep, bir figürü turşu ile kurtardım ve onları sharex özelliğini kaybeden başka bir programla yeniden yüklüyorum.
ymmx

4
Bu, belirli alt alanları bağlamak için kullanışlıdır. Örneğin, 4 alt grafik içeren bir şekil: iki zaman serisi ve iki histogram. Bu, zaman serilerini seçmeli olarak bağlamanıza olanak tanır.
Hamid

2
Grouper nesnesi için API belgeleri: matplotlib.org/2.0.2/api/…
michaelosthege

3
Ohh, bir eksenin paylaşımını nasıl kaldıracağımı (büyük bir ızgarada faydalı olabilir) - o eksende yapın g = ax.get_shared_y_axes(); g.remove(a) for a in g.get_siblings(ax)]. Başlangıç ​​noktası için teşekkürler!
naught101

3
@ naught101 Sadece arayabilirsiniz ax2.autoscale().
ImportanceOfBeingErnest
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.