2013-08-23 18 views
9

Do niedawna używałem Mathematica do moich fabuł. Chociaż był to prawdziwy ból i wszystko musiało być zrobione ręcznie, wyniki były bardzo bliskie temu, co chciałem. Jednym z przykładów jest następujący:Matplotlib kolor paska tła i umieszczenie etykiety

Mathematica example plot

bardzo podoba mi się szary prostokąt zaokrąglony w tle colorbar. Podczas gdy wszystko musiało być ręcznie dostosowane w Mathematica, matplotlib jest dużo bardziej automatyczny i już przynosi dobre rezultaty.

Mathematica example plot

Ale wciąż istnieją dwa problemy mam:

  1. nie wiem jak to zrobić zaokrąglony prostokąt w tle. Spojrzałem na poprawkę fancybboksa, ale nie udało mi się jej obsłużyć na kolorowym pasku tak, jak tego chcę. Jaki jest najlepszy sposób na uzyskanie czegoś takiego jak pudełko Mathematica? Legenda w działkach wydaje się być fantazyjną opcją boksów ... ale nie dla pasków kolorów
  2. Kiedy używam znaku "mniejszego znaku" (<) etykieta paska kolorów przesuwa się zbyt daleko w prawo. Jak mogę to zmienić (może nawet "pomiędzy" liczbami, tak jak na wykresie Mathematica)?

Z niecierpliwością czekam na wszelkie sugestie wskazujące w dobrym kierunku :).

+0

http://stackoverflow.com/questions/15882249/matplotlib-aligning-y-ticks-to-the-left/15883858#15883858 <- jak ustawić wyściółka na etykietach kleszczowych – tacaswell

+1

Pokażcie nam kod. – tacaswell

Odpowiedz

17

do drugiego pytania: można użyć ujemną wartość labelpad przenieść etykietę z powrotem w kierunku ticklabels, tak:

import numpy as np 
import matplotlib.pyplot as plt 

data = np.linspace(0, 10, num=256).reshape(16,16) 

cf = plt.contourf(data, levels=(0, 2.5, 5, 7.5, 10)) 
cb = plt.colorbar(cf) 

cb.set_ticklabels([r'$<10^{0}$', 1, 2, r'$10^{14}$', r'$10^{14}+12345678$']) 
cb.set_label(r'$n_e$ in $m^{-3}$', labelpad=-40, y=0.45) 

plt.show() 

Korzystanie parametr y można dodatkowo przesuwać etykietę w górę lub w dół do lepsza symetria.

Argument labelpad podano w punktach (1/72 cala). y akceptuje wartości w [0, 1], 0.0 jest dolną granicą i 1.0 górną.

Rezultat:

Script Output

+1

'y' nie jest ograniczone do przedziału' [0.0, 1.0] '. Może przyjmować dowolną liczbę zmiennoprzecinkową/całkowitą. Jeśli "y> 1.0" etykieta zostanie umieszczona na górze osi, a jeśli "y <0.0" zostanie umieszczone _naej_ na dole osi. Współrzędne osi są _normalizowane_, co oznacza, że ​​"0.0" to "początek" i "1.0" "koniec" zasięgu osi. – hooy

+0

Aby było jasne: '[0, 1]' to notacja_interval_, a nie notacja list. Oznacza to od "0" do "1" włącznie. Dotyczy to zarówno odpowiedzi, jak i komentarza powyżej. – hooy

Powiązane problemy