2013-11-14 28 views
5

iPython dizüstü bilgisayarını matplotlib ile birlikte çok kullanıyorum ve mutlu olduğumda birçok vaka varken imshow() işlevini çağırdığımda görüntüleri otomatik olarak görüntüler, bu davranışı önlemek istediğim anlar var.iPython defter: imshow() üzerinde görüntü çıkışı nasıl önlenir?

Özellikle çok büyük bir dizi üzerinde döngü yapıyorum ve diske kaydedilmesi gereken her öğe için matplotlib'de bir şekil oluşturuyorum. Bu şekil oluşturma işleminin bir parçası olarak imshow() 'ı mevcut bir görüntüyü (benim durumumda haritanın ekran görüntüsü) çizmek için eksene kaydırmalıyım. İşlemin bir parçası olarak imshow'u çağırdığımda, iPython defterinde son rakam satır içi olarak görüntülenir, bunu nasıl önleyebilirim?

Benim kod şöyle görünür:

import matplotlib as plt 
fig = plt.pyplot.figure(figsize=(20,20)) 
im2 = plt.pyplot.imread('/some/dir/fancy-map.png') 

# Magic to calculate points, x_min etc. 

fig.clf() 
ax = fig.gca(xlim=(x_min, x_max), ylim=(y_min, y_max)) 
ax.imshow(im2, extent=(4, 4.5746, 42.5448, 43.3791), aspect=1.5) 
raster = ax.imshow(points, vmin = 0, vmax=maxval, extent=(x_min, x_max, y_min, y_max), aspect=1.5, origin='lower') 
fig.colorbar(raster) 
ax.set_title('coordinates plot') 

fig.savefig("fancy-annotated-map.png", bbox_inches=0) 

cevap

3

bir fonksiyonu içine bu taşımayı deneyin ve fonksiyonun başlangıcında pylab.ioff() yapmak ve bitiş dönüşünde pylab.ion() için:

# Obvs add arguments so you can pass in your data and plot choices. 
def make_img(): 
    pylab.ioff() 

    import matplotlib as plt 
    fig = plt.pyplot.figure(figsize=(20,20)) 
    im2 = plt.pyplot.imread('/some/dir/fancy-map.png') 

    # Magic to calculate points, x_min etc. 

    fig.clf() 
    ax = fig.gca(xlim=(x_min, x_max), ylim=(y_min, y_max)) 
    ax.imshow(im2, extent=(4, 4.5746, 42.5448, 43.3791), aspect=1.5) 
    raster = ax.imshow(points, 
         vmin = 0, 
         vmax=maxval, 
         extent=(x_min, x_max, y_min, y_max), 
         aspect=1.5, 
         origin='lower') 
    fig.colorbar(raster) 
    ax.set_title('coordinates plot') 
    fig.savefig("fancy-annotated-map.png", bbox_inches=0) 

    pylab.ion() 
  1. Bu, yalnızca IPython içindeki işlevi kullandığınızı veya pylab öğesinin her zaman alındığını varsayar. Fonksiyonu başka bir yerde kullanabilmek için etrafına bir try ... except sarın.

  2. the template for making your own IPython Magic functions bir göz (%cpaste gibi % veya %% işlev çağrıları,) var. Buna iyi bir yaklaşım, %imnoshow ya da imshow'u çalan parçayı saran kendi sihrinizi yaratmak olacaktır. Böylece, imshow çıktısını izlemek zorunda kalmadan in-line elleçleme yapabilirsiniz. Sorunuz genel bir çizim arayüzü ile değil, bu konuyla ilgili olduğundan, burada bunu uygulamaya çalışmamayı umuyorum, ancak umarız yukarıdaki bağlantı, ihtiyacınız olduğunda bir şeyi uygulayabilmeniz için yeterli olacaktır.

  3. başka bir yaklaşım, kendi IPython configuration environment kurma onlar yüklü olacak şekilde Sonra kendi özel çizim işlevlerini yerleştirmek vb kendi ithalat ve yardımcı sınıf tanımları, dolu bazı belirli .py dosyayı sahip dahil talimatlarını takip etmektir Başlangıçta ve IPython'da global kapsamda mevcuttur. Bunu birkaç nedenden ötürü şiddetle tavsiye ediyorum: (a) aslında kendi yardımcı fonksiyonlarınız için birim testleri yazabilir ve hatta dilediğiniz zaman IPython'u her başlattığınızda test edebilirsiniz! (b) Bu, daha kolay bir şekilde sürüm kontrolü yapmanızı ve sık sık ihtiyaç duyduğunuz yardımcı fonksiyonların mantığını kapsamanızı sağlar. (c) Bir sihir fonksiyonu yapmaya veya daha sonra içe aktarmaya gerek kalmadan "sadece orada olmak" işlevinden yararlanırsınız.

+0

Mükemmel, teşekkürler! Şu an için pylab.ioff() işlevini kullanarak sona erdi ama kesinlikle bir iPython sihirbazlık işlevi görmeye bakacak. – Robin

İlgili konular