2012-11-23 14 views
5

Wykreślanie figury za pomocą paska kolorów, jak na przykład ellipse collection galerii matplotlib, próbuję zrozumieć geometrię figury. Jeśli dodać następujący kod w kodzie źródłowym (zamiast plt.show()):geometria pasków kolorów w matplotlib

cc=plt.gcf().get_children() 
print(cc[1].get_geometry()) 
print(cc[2].get_geometry()) 

uzyskać

(1, 2, 1) 
(3, 1, 2) 

Rozumiem pierwsza - 1 wiersz, dwie kolumny, działka pierwszy (i przypuszczalnie drugi to pasek kolorów), ale nie rozumiem drugiego, czego bym się spodziewał (1,2,2). Co odpowiadają te wartości?

Edycja: Wygląda na to, że elementy w cc nie mają tych samych osi, co wyjaśniałoby rozbieżności. Jakoś nadal jestem zdezorientowany z raportowanymi geometriami.

+0

Moja moc jest inna; Otrzymuję '(1,1,1)' a druga 'print' zwraca wyjątek,' AttributeError: 'Obiekt Axes' nie ma atrybutu "get_geometry". – egpbos

Odpowiedz

2

Co dzieje się to podczas rozmowy colorbar, use_gridspec domyślne do True które następnie powoduje wywołanie matplotlib.colorbar.make_axes_gridspec który następnie tworzy 1 przez 2 siatki do przechowywania działki i cbar osie następnie następnie cbar oś sobie jest faktycznie 3 od 1 siatce która jego proporcje dostosowane

kluczem linia matplotlib.colorbar.make_axes_gridspec co sprawia, że ​​tak się stało jest

gs2 = gs_from_sp_spec(3, 1, subplot_spec=gs[1], hspace=0., 
         height_ratios=wh_ratios) 

ponieważ wh_ratios == [0.0, 1.0, 0.0] domyślnie więc pozostałe dwa wątków powyżej i poniżej 0 razy większy od średniej powierzchni.

Włożyłam co zrobiłem rysunek to w an IPython notebook

+0

Zauważyłem, że jeśli nadaję funkcji 'colorbar()' wywołanie argumentu 'ax':' plt.colorbar (sth, ax = ax) ', geometria' ax' zostanie zmieniona, np. topór jest tworzony jako 'ax = fig.add_subplot (2,3,4) ', a następnie po ustawieniu paska koloru jego geometria zostanie zmieniona na" (2,1,1) "zawsze myślę (2,1,1) sama fabuła, a (2,1,2) to pasek kolorów. Jeśli utworzę nowy ax2 = fig.add_subplot (2,3,4) ', geometria osi 2 jest znowu (2,1,1). Czy można to uznać za błąd? – Jason

Powiązane problemy