Aslında yeni bir eksen eklemiyorsunuz.
Matplotlib, bu konumda zaten bir çizim olduğunu ve yeni bir eksen nesnesi yerine döndürdüğünü algılıyor.
(kendiniz için kontrol edin. ax
ve newax
aynı nesne olacaktır.)
var burada muhtemelen isterdim neden bir neden değil, ama bunu yapardım nasıl.
(Ayrıca, newax = plt.axes()
demiyorlar ve sonra iki kez aynı şeyi yapıyoruz fig.add_subplot(newax)
diyoruz.)
Edit: matplotlib yeni (?> = 1.2, sanırım) sürümleri ile, başarabilirsiniz Aşağıdaki örnekle aynı şekilde label
kwarg kullanarak fig.add_subplot. Örneğin. Tabii newax = fig.add_subplot(111, label='some unique string')
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
# If you just call `plt.axes()` or equivalently `fig.add_subplot()` matplotlib
# will just return `ax` again. It _won't_ create a new axis unless we
# call fig.add_axes() or reset fig._seen
newax = fig.add_axes(ax.get_position(), frameon=False)
ax.plot(range(10), 'r-')
newax.plot(range(50), 'g-')
newax.axis('equal')
plt.show()
, bu korkunç görünüyor, ama ben sadece bir eklemek istediğiniz önceki sorulardan tahmin ediyorum için ...
Eğer sorduğun buysa ikinci x ekseni? Eğer öyleyse, bu tamamen farklı bir şey.
Eğer y eksenlerini birbirine bağlamak istiyorsanız, o zaman böyle bir şey yapın (biraz ayrıntılı ...):
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
newax = fig.add_axes(ax.get_position())
newax.patch.set_visible(False)
newax.yaxis.set_visible(False)
for spinename, spine in newax.spines.iteritems():
if spinename != 'bottom':
spine.set_visible(False)
newax.spines['bottom'].set_position(('outward', 25))
ax.plot(range(10), 'r-')
x = np.linspace(0, 6*np.pi)
newax.plot(x, 0.001 * np.cos(x), 'g-')
plt.show()
: Bir gizli, bağlantısız y eksenini, ve tamamen yeni bir x eksenini olmasını istiyorsanız
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
newax = ax.twiny()
# Make some room at the bottom
fig.subplots_adjust(bottom=0.20)
# I'm guessing you want them both on the bottom...
newax.set_frame_on(True)
newax.patch.set_visible(False)
newax.xaxis.set_ticks_position('bottom')
newax.xaxis.set_label_position('bottom')
newax.spines['bottom'].set_position(('outward', 40))
ax.plot(range(10), 'r-')
newax.plot(range(21), 'g-')
ax.set_xlabel('Red Thing')
newax.set_xlabel('Green Thing')
plt.show()
, o zaman böyle bir şey yapmak istiyorum
newax
üzerinde çizilen her şey için y ekseni değerlerinin hiçbir zaman gösterilmediğini unutmayın.
Eğer isteseydim
, hatta (... bundan noktası ne olacağını tam olarak emin değilim ama düzgün görünüyor) ayrıca bunu bir adım öteye ve bağımsız x ve y eksenleri olabilir:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2, right=0.85)
newax = fig.add_axes(ax.get_position())
newax.patch.set_visible(False)
newax.yaxis.set_label_position('right')
newax.yaxis.set_ticks_position('right')
newax.spines['bottom'].set_position(('outward', 35))
ax.plot(range(10), 'r-')
ax.set_xlabel('Red X-axis', color='red')
ax.set_ylabel('Red Y-axis', color='red')
x = np.linspace(0, 6*np.pi)
newax.plot(x, 0.001 * np.cos(x), 'g-')
newax.set_xlabel('Green X-axis', color='green')
newax.set_ylabel('Green Y-axis', color='green')
plt.show()
Ayrıca sadece arsa altındaki fazladan omurgayı ekleyebilir. Bazen bu daha kolay, özellikle de keneler veya sayısal şeyler istemiyorsanız. Çok fazla kendi cevaplar birini takmak için, ama bu bir örnek var burada: Bir aracılığıyla bağlanan farklı x ve y eksenleri yapmak istiyorsanız How do I plot multiple X or Y axes in matplotlib?
biri olarak son şey, parasite axes examples bakmak emin olun özgül dönüşüm.
Evet, aslında iki eksen hakkındaydı ... 'Twinx' ve şimdi 'twiny' (sanırım ikinci var olduğunu tahmin etmeliydim) almadım ama ihtiyaç duyduklarını düşünmedim. arsa genişliği aynı olduğu sürece "bağlantılı" olmak zorundadır (çünkü limitleri o zamana eşit olarak ayarlayabilirim). – hatmatrix
Eğer bunu yapmaya istekli olsaydım, bu ilk örnek diğer dikenlerin görünürlüğünü kapatarak da işe yarayabilirdi. Matplotlib'deki her bir metotta, var olan "kolaylık" fonksiyonlarının her birini öğrenmek zorunda kalmadan, çoğu durumda uygulanabilecek birkaç "genel" fonksiyona gideceğime dair çok fazla varyasyon var gibi görünüyor ... ama teşekkürler, bu çözüyor herşey. Ama plt.axes() aynı nesneyi geri döndüren bir sürprizdi - diye düşündüm plt.gca() bunun için. Ve bu Matlab'dan farklı ... – hatmatrix
Eh, 'plt.axes()' diğer herhangi bir durumda yeni bir eksen oluşturur. Sadece o konumda bir eksenin olup olmadığını kontrol eden bir kod parçasına sahiptir ve eğer öyleyse onu döndürür (ve mevcut ekseni yapar). (Temel olarak, "plt.axes()" belgesindeki 3. mermi noktası, satırlar arasında okumanız gerekse de ...) –