2009-07-17 7 views
20

Bir jpg görüntüsü görüntüliyorum (bunu ilgili ise 90 derece döndürüyorum) ve tabiki eksenler piksel koordinatlarını görüntüler. Ekseni dönüştürmek istiyorum ki, piksel sayısını göstermek yerine, tercihimdeki birimi göstereceğim - radyan, derece veya benim durumumda astronomik bir koordinat olsun. Pikselden (örn.) Dereceye dönüşümü biliyorum. İşte benim Kod şu anda neye benzediğini snippet'idir:Eksen değerlerini nasıl dönüştürürüm (veya ölçeklendiririm) ve matplotlib'deki kene frekansını yeniden tanımlayabilir miyim?

import matplotlib.pyplot as plt 
import Image 
import matplotlib 
thumb = Image.open(self.image) 
thumb = thumb.rotate(90) 
dpi = plt.rcParams['figure.dpi'] 
figsize = thumb.size[0]/dpi, thumb.size[1]/dpi 
fig = plt.figure(figsize=figsize) 
plt.imshow(thumb, origin='lower',aspect='equal') 
plt.show() 

... ben matplotlib ekseninde yazdırmak ve değişim/bir dizeye ile değiştirmek istiyorum her değeri alabilir, bundan aşağıdaki çıktı mı? Bunu belirli bir koordinat formatı için yapmak istiyorum - örneğin, bir 10.44 (derece) açısı yerine, 10 26 '24' '(yani, derece, arcmins, arcsecs) okumasını isterim

Son olarak Bu tema üzerinde, arsa üzerinde kene frekansı üzerinde kontrol istiyorum. Matplotlib, eksen değerini her 50 pikselde yazdırabilir, ancak her örneğin (örneğin) derece isterim.

Görüntülenmesini istediğim piksel değerleri ve dönüştürülmüş değerleri (derece vb.) Içeren bir dizi diziyi xmin/xmax aralığı aralığında örnekleme sıklığı üzerinde kontrol etmek istiyorum.

Yığın Taşması konusunda herhangi bir matplotlib uzmanı var mı? Eğer öyleyse, yardımlarınız için şimdiden çok teşekkürler! Bunu daha fazla öğrenme deneyimi için, matplotlib probleminin bu türünde öğreticiler vb. Kendimi eksenler, eksen, figürler, sanatçılar vb. Ile çok karıştırarak buldum!

Alkış,

Dave sanatçılar ile uğraşan çoğu bypass mümkün olacak demektir matplotlib.pyplot arayüzü ile uğraşıyoruz gibi görünüyor

cevap

31

, baltalar ve benzeri. Aşağıdaki gibi, matplotlib.pyplot.xticks komutunu kullanarak onay işaretleri değerlerini ve etiketleri kontrol edebilir:

tick_locs = [list of locations where you want your tick marks placed] 
tick_lbls = [list of corresponding labels for each of the tick marks] 
plt.xticks(tick_locs, tick_lbls) 

belirli Örneğin, (onay işaretleri birimlerine göreli ne hesaplamak gerekir yani piksel) orijinal grafiğinizin (imshow kullanıyor olduğunuzdan) - bunun nasıl yapıldığını bildiğini söylemiştiniz.

ben çok görüntülerle ele değil, ama sen x ve y bilgi vermek izin veren farklı bir komplo yöntemi (örn pcolor) kullanmak mümkün olabilir. Bu, resminizin birimlerini tanımlamak için size birkaç seçenek daha verebilir.

Öğreticiler için, matplotlib gallery'a bakmaktan hoşlanırsınız - hoşunuza giden bir şey bulmak ve onu üreten kodu okuyun. Büromuzdaki adamlardan biri yakın zamanda Python visualization numaralı kitabı satın aldı. aşağıdaki gibi

Genellikle bütün değişik parçalardan düşünüyorum yoludur:

  • bir Figure tüm Axes
  • bir Axes için bir kapsayıcıdır çizdiğiniz Ne alanıdır (yanisenin arsa) aslında
  • bir Axis
  • Sanatçılar gerçek x ve y eksenleri olan beliriyor Bu benim için arayüzde çok derin: Üretim alanlarında nadiren pyplot modülünü kullanmama rağmen, bunlar hakkında henüz endişelenmem.
+0

Teşekkür ederim - bu harika çalışıyor. Yine bir yorum daha. Ben plt.xticks kullandığınızda, ben arsa görüntülendiğinde, farenin x, y pozisyonunu (bunu herhangi bir açıdan piksel olarak beklerim) alamıyorum. Bunun neden olabileceği hakkında bir fikrin var mı? – Dave

+0

Bu * bir tuhaflık - Bunu daha önce hiç fark etmedim. Ben bir tavsiye yapmak için bu GUI pencere hakkında yeterli bilmiyorum - burada veya matplotlib posta listesine iyi bir soru olabilir. –

+0

Koordinatları dönüştürmek için daha iyi bir çözüm, imshow'u kullanırken "ölçüde" anahtar sözcüğünü kullanmaktır. – Phlya