2012-02-02 22 views
21

Bir elipsin bir imshow çizimine çizim yapmaya çalışıyorum. Bu, ancak inşaat görüntüyü çizildikten sonra elips komplo kurtulmak İsterdim bir sınırda, sonuçlanan xlim ve İlim artırmak gibi görünüyor: Doğrudan YOK beyaz sınır olduğunumatplotlib: aynı eksende arsa ve imshow kullanırken sınırlar

Not sadece imshow çağırdıktan sonra. aşağıdaki gibi

Kodum görünür: Daha önce ve "komplo" çağrıldıktan sonra limitler belirlemek denedim

self.dpi = 100 
self.fig = Figure((6.0, 6.0), dpi=self.dpi) 
self.canvas = FigureCanvas(self.fig) 
self.canvas.setMinimumSize(800, 400) 
self.cax = None 
self.axes = self.fig.add_subplot(111) 
self.axes.imshow(channel1, interpolation="nearest") 
self.canvas.draw() 
self.axes.plot(dat[0], dat[1], "b-") 

hiçbir etkisi ile, ben artırmak için değil arsa zorlayabilir nasıl

# get limits after calling imshow 
xlim, ylim = pylab.xlim(), pylab.ylim() 
... 
# set limits before/after calling plot 
self.axes.set_xlim(xlim) 
self.axes.set_ylim(ylim) 

Mevcut rakam sınırları?

Çözüm (Joe sayesinde):

#for newer matplotlib versions 
self.axes.imshow(channel1, interpolation="nearest") 
self.axes.autoscale(False) 
self.axes.plot(dat[0], dat[1], "b-") 

#for older matplotlib versions (worked for me using 0.99.1.1) 
self.axes.imshow(channel1, interpolation="nearest") 
self.axes.plot(dat[0], dat[1], "b-", scalex=False, scaley=False) 

cevap

29

Ne oluyor ekseni her öğe size arsa sahayı maç için autoscaling olmasıdır. Görüntüler, çizgilerden daha sıkı otomatik hale getirilir (imshow, temel olarak ax.axis('image')).

Eksen sınırlarını önceden alın ve sonra ayarlanmış olması gerekir. (Daha önce limits = axes.axis() ve axes.axis(limits) modellerini kullanmadan önce temizleyin.)

Ancak, bazı şeylerin otomatik ölçeklendirilmesini istemiyorsanız, ilk çizimden sonra otomatik ölçeklendirmeyi kapatmak en iyisidir. Resmi çizdikten sonra axes.autoscale(False)'u deneyin.

Örnek olarak, bu karşılaştırma:

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots() 
ax.imshow(np.random.random((10,10))) 
ax.plot(range(11)) 
plt.show() 

enter image description here


Bununla:

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots() 
ax.imshow(np.random.random((10,10))) 
ax.autoscale(False) 
ax.plot(range(11)) 
plt.show() 

enter image description here

+3

Merhaba Joe, detaylı exp için teşekkürler lanation! Matplotlib sürümüm çok eski (matplotlib .__ version__ = '0.99.1.1') gibi görünmüyor, ne plt.subplots() ne de ax.autoscale'i desteklediğinden, siz autoscale = False'ı işaretlediğinizde [alternatif çözüm] buldum (http://stackoverflow.com/questions/7386872/make-matplotlib-autoscaling-ignore-some-of-the-plots) sorunumu düzeltir: başlangıçta imshow'u çağırdıktan sonra arsa kullandığım her defasında, scalex anahtar sözcüğünü kullanıyorum Yanlış, scaley = Yanlış, doğru olanı yapar! Teşekkürler! – soramimo