Matlablotlib planımda neden xlabelim kesildi?


303

Ben matplotliboldukça "uzun" olan bir xlabel kullanarak bir veri kümesi çiziyorum (bu bir kesir içeren ve bu nedenle birkaç satır metin yüksekliğine eşdeğer olan bir formül TeX içinde işlenir).

Her durumda, rakamları çizdiğimde formülün tabanı her zaman kesilir. Şekil boyutunun değiştirilmesi buna yardımcı görünmüyor ve x-etiketine yer açmak için x eksenini nasıl "yukarı" kaydıracağımı anlayamadım. Böyle bir şey makul bir geçici çözüm olacaktır, ancak güzel olacak şey, matplotlib'in etiketin kesildiğini ve buna göre yeniden boyutlandırıldığını otomatik olarak tanımasını sağlamanın bir yolu olacaktır.

İşte ne demek istediğimin bir örneği:

import matplotlib.pyplot as plt

plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
plt.show()

ylabelin tamamını görebildiğinizde, xlabel alttan kesilir.

Bu makineye özgü bir sorun olması durumunda, bunu OSX 10.6.8 üzerinde matplotlib 1.0.0 ile çalıştırıyorum


4
Bir resim barındırma sitesinde yayınlayabilir ve buraya bağlayabilirsiniz.
agf

1
Bu sorunu tetikleyen minimalist bir örnek kod gönderebilirseniz yardımcı olur. Bu şekilde, insanlar sorununuzu daha hızlı anlayabilir ve yeniden üretebilir ve size yardımcı olmaları daha olasıdır.
Denilson Sá Maia

Kodunuz makinemde iyi çalışıyor (formülü tamamen görünür) (ubuntu 11.04 64bit). Belki makineye özgü bir problemdir [resimde yanlış boyut bilgilerinin kullanıldığı bir font gibi?]. Sorunuzda kullandığınız sistemi belirtebilirsiniz.
mac

9
ayrıca deneyebilirsiniz plt.savefig("test.png",bbox_inches='tight'): stackoverflow.com/questions/21288062/…
Yibo Yang

Yanıtlar:


474

kullanın:

import matplotlib.pyplot as plt

plt.gcf().subplots_adjust(bottom=0.15)

etikete yer açmak.

Düzenle:

Ben cevap verdi beri matplotlib, tight_layout()işlevi ekledi . Bu yüzden kullanmanızı öneririm:

plt.tight_layout()

xlabel için yer açmalı.


141
Bir arsanın önemli bir parçası için yer açmak için ekstra bir çağrı yapmak gerektiğini oldukça garip buluyorum. Bunun arkasındaki sebep nedir?
farklı bir ben

3
Sadece meraktan, neden gcf().subplots_adjustdaha çok var plt.subplots_adjust? Bir fark var mı?
ardıç

49
Nedir gcfve gca? Açıklamayı ihmal ettin!
Albay Panik

12
Aynı sorunla karşı karşıya tight_layout()kaldım ve xlabels kesimini düzeltti, maalesef benim ylabel'in kesilmesine neden oldu (daha önce kesilmemişti). Ancak, ilk çare ( subplots_adjust(bottom=0.25)) güzel çalıştı. Teşekkürler.
Scott H

17
@ColonelPanic gcf()ve gca()sırasıyla "mevcut rakamı al" ve "akım eksenlerini al" dır.
DrMisha

150

Kolay bir seçenek, matplotlib'i çizim boyutunu otomatik olarak ayarlayacak şekilde yapılandırmaktır. Benim için mükemmel çalışıyor ve neden varsayılan olarak etkinleştirilmediğinden emin değilim.

Yöntem 1

Bunu matplotlibrc dosyanızda ayarlayın

figure.autolayout : True

Matplotlibrc dosyasını özelleştirme hakkında daha fazla bilgi için buraya bakın: http://matplotlib.org/users/customizing.html

Yöntem 2

Çalışma zamanında rcParams'ı bu şekilde güncelleyin

from matplotlib import rcParams
rcParams.update({'figure.autolayout': True})

Bu yaklaşımı kullanmanın avantajı, kodunuzun farklı yapılandırılmış makinelerde aynı grafikleri üretmesidir.


Bu seçeneği kullanırken çok büyük renk çubuklarıyla ilgili bazı sorunlar yaşadım. Olası bir çözüm burada tartışılmaktadır: matplotlib.org/users/tight_layout_guide.html
PiQuer

2
Özel (büyük!) yazı tiplerini ayarladığımda tight_layout bir şeyleri karıştırır. Bu çok daha iyi bir iş çıkarıyor.
BenB

RcParams'ı güncellemek gerçekten LaTeX ile pgf arka ucunu kullanırken benim için işe yarayan tek şeydi. (buna dikkat etmediğim dikdörtgeni
çizmesine rağmen

Sadece bu benim için çalıştı; tight_layout veya box_inches
hiçbiri

106

Dosyaya depolamak istiyorsanız, bbox_inches="tight"argüman kullanarak çözersiniz:

plt.savefig('myfile.png', bbox_inches = "tight")

2
@Guido gün kurtardı
pcko1

7

Koymak plot.tight_layout()hemen önce, grafikteki tüm değişikliklerden sonra show()veya savefig()sorunu çözecektir.


1
Bu, arsanın altına yer açmaz, ancak bazı durumlarda (benimki gibi) arsanın gerçekten garip görünmesini sağlayabilir.
89f3a1c


5

Özel dolguyu $HOME/.matplotlib/matplotlib_rcaşağıdaki gibi varsayılan olarak da ayarlayabilirsiniz . Aşağıdaki örnekte, kutunun altından ve solundan çıkan dolguları değiştirdim:

# The figure subplot parameters.  All dimensions are a fraction of the
# figure width or height
figure.subplot.left  : 0.1 #left side of the subplots of the figure
#figure.subplot.right : 0.9 
figure.subplot.bottom : 0.15
...
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.