2009-07-17 18 views
20

Wyświetlam obraz jpg (obrócę go o 90 stopni, jeśli jest to istotne) i oczywiście , osie wyświetlają współrzędne pikseli. Chciałbym przekonwertować oś, aby zamiast wyświetlać liczbę pikseli, wyświetliłaby moją jednostkę wyboru - czy to radianów, stopni czy w moim przypadku astronomiczną współrzędną. Znam konwersję z piksela na (np.) Stopień. Oto fragment tego, co mój kod wygląda obecnie:Jak przekonwertować (lub skalować) wartości osi i przedefiniować częstotliwość znaczników w matplotlib?

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() 

... więc co wynika z tego, mogę podjąć każdą wartość matplotlib będzie drukować na osi oraz zmianę/zastąpienie go sznurkiem do wyjście zamiast? Chciałbym to zrobić dla konkretnego formatu współrzędnych - np. Zamiast kąta 10.44 (w stopniach), chciałbym, aby przeczytano 10 26 '24' '(tj. Stopnie, arcmins, arcsecs)

Wreszcie na ten temat, chciałbym kontroli nad częstotliwością kleszczy na działce. Matplotlib może drukować wartość osi co każde 50 pikseli, ale naprawdę chciałbym ją mieć w każdym (na przykład) stopniu.

Wygląda na to, że chciałbym zdefiniować jakąś tablicę z wartościami pikseli i ich przekonwertowanymi wartościami (stopniami itp.), Które chcę wyświetlić, mając kontrolę nad częstotliwością próbkowania w zakresie xmin/xmax.

Czy w serwisie Stack Overflow są eksperci matplotlib? Jeśli tak, bardzo dziękuję z góry za pomoc! Aby uczynić to bardziej uczącym się doświadczeniem, naprawdę doceniłbym bycie popchniętym w kierunku samouczków itp. Dotyczących tego rodzaju problemu z matplotlib. Stwierdziłem, że jestem bardzo zmieszany z osiami, osią, figurami, artystami itd.!

Cheers,

Dave

Odpowiedz

31

Wygląda na to, że masz do czynienia z interfejsem matplotlib.pyplot, co oznacza, że ​​będziesz w stanie ominąć większość czynienia z artystów, siekiery, i tym podobne. Można kontrolować wartości i etykiety znaczników kleszczy za pomocą komendy matplotlib.pyplot.xticks, co następuje:

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) 

dla konkretnego przykładu, musisz obliczyć jakie znaki podziałki są w stosunku do jednostki (tj pikseli) twojego pierwotnego spisku (skoro używasz imshow) - powiedziałeś, że wiesz jak to zrobić.

I nie mieć do czynienia z obrazami dużo, ale może być w stanie wykorzystać inną metodę kreślenia (np pcolor), który pozwala dostarczać x i y informacji. To może dać ci jeszcze kilka opcji do określenia jednostek twojego obrazu.

W przypadku samouczków dobrze byłoby przejrzeć matplotlib gallery - znaleźć coś, co lubisz, i przeczytać kod, który go wyprodukował. Jeden z gości w naszym biurze niedawno kupił książkę pod numerem Python visualization - na którą warto zwrócić uwagę.

Sposób, że ogólnie myśleć o wszystkich różnych elementów jest następująca:

  • Figure jest kontenerem dla całej Axes
  • An Axes jest przestrzenią, w której co zwrócić (tjTwoja działka) rzeczywiście pojawia się
  • Axis jest rzeczywiste x i y osie
  • Artists? To jest dla mnie za mało w interfejsie: nigdy jeszcze nie musiałem się o to martwić, chociaż rzadko używam modułu pyplot na wykresach produkcyjnych.
+0

Dziękuję - działa to znakomicie. Jeszcze jeden komentarz. Kiedy używam plt.xticks, nie dostaję już pozycji x, y (spodziewam się tego jako pikseli pod dowolnym względem) myszy, gdy wyświetlany jest wykres. Jakiś pomysł, dlaczego tak się stało? – Dave

+0

To * jest * dziwne - nigdy wcześniej tego nie zauważyłem. Nie wiem wystarczająco dużo o tym oknie GUI, aby zrobić rekomendację - może być dobrym pytaniem tutaj lub na liście dyskusyjnej matplotlib. –

+0

Lepszym rozwiązaniem do konwersji współrzędnych jest użycie słowa kluczowego 'extent' przy używaniu imshow. – Phlya

Powiązane problemy