Matplotlib'e bir komplo ile bittiğimi nasıl anlarım?


166

Aşağıdaki kod iki PostScript (.ps) dosyasına çizim yapar , ancak ikincisi her iki satırı da içerir.

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.subplot(111)
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("first.ps")


plt.subplot(111)
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

Matplotlib'e ikinci arsa için yeniden başlamasını nasıl söyleyebilirim?


3
bir stil noktası olarak, şekil başına yalnızca bir çiziminiz olduğunda alt grafiği kullanmaya gerek yoktur.
Autoplectic

Yanıtlar:


124

Sen kullanabilirsiniz figureörneğin, yeni bir arsa oluşturmak veya kullanmak üzere closeilk arsa sonra.


19
Pyplot dersinde "çoklu şekiller" bölümünde clf () belirtilir. Eski (close) ile kapatmadan (GUI penceresini kapatsanız bile), figure () ile yeni bir çizim oluşturursanız, pyplot, eski rakamınıza bir bellek sızıntısı gibi görünebilecek bir referans saklar.
Jouni K. Seppänen

5
Tüm eski rakamları kaldırmak için plt.close () / pylab.close () kullanabilirsiniz
Calvin1602

1
İlk plandan sonra, sonra plt.savefig("first.ps")mı demek istiyorsun ?
Sigur

@ JouniK.Seppänen Sadece yorumunuza eklemek için, birçok rakamı açarsanız Python varsayılan olarak sizi uyarır: "RuntimeWarning: 20'den fazla rakam açıldı.".
rph

173

Net bir şekil komutu var ve bunu sizin için yapmalı:

plt.clf()

Aynı şekilde birden fazla alt grafiğiniz varsa

plt.cla()

mevcut eksenleri siler.


1
Teşekkürler! PDF arka ucunu kullanıyorsanız (bu, birden fazla parsel kaydetmenize izin verir) plt.save () öğesine her çağrıdan sonra bunu çağırmanız gerekir
Ben

4
Benim durumumda, plt.clf () rakamı temizlemek için yeterliydi, ancak bellek sızıntılarını durdurmak için yetersizdi, ama önce plt.close () öğesini çağırmak bellek sızıntısını durdurdu. Python 2.7, matplotlib 1.1.1rc1 (ubuntu 12.04). Bilginize.
DJDuff

29

David Cournapeau'dan da belirtildiği gibi şekil () kullanın.

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.figure()
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("first.ps")


plt.figure()
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

Veya aynı grafik, farklı konum için alt grafik (121) / alt grafik (122).

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.subplot(121)
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")

plt.subplot(122)
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

3
yine de kullanmalısınız plt.clf(), rakamlar açıkça kapatılana kadar hafızada tutulur
kaveish

13

Sadece plt.hold(False)ilk plt.plot'tan önce girin ve orijinal kodunuza sadık kalabilirsiniz.


6
matplotlib == 2.0.2, bu iletiyi alıyorum: MatplotlibDeprecationWarning: pyplot.hold kullanımdan kaldırıldı.
Jonathan

12

Matplotlib'i etkileşimli olarak kullanıyorsanız, örneğin bir web uygulamasında (örneğin ipython)

plt.show()

yerine plt.close()veya plt.clf().


Bana kaybetmek zorunda olmadığım bir sürü zaman
kazandın

1

Bunlardan hiçbiri çalışmıyorsa, bunu kontrol edin .. ilgili eksen boyunca x ve y veri diziniz olup olmadığını söyleyin. Sonra boşaltmak için x ve y'yi başlattığınız hücreyi (jupyter) kontrol edin. Bunun nedeni, belki yeniden başlatmadan x ve y'ye veri eklemiş olmanızdır. Yani arsada da eski veriler var. Öyleyse kontrol et ..

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.