2011-09-29 12 views
31

Jak można zmienić szerokość linii paska błędów w Matplotlib?Jak ustawić szerokość kreski na pasku błędów w matplotlib?

Próbowałem następujący kod:

(_, caplines, _) = matplotlib.pyplot.errorbar(
    data['distance'], data['energy'], yerr=data['energy sigma'], 
    capsize=10, elinewidth=3) 

for capline in caplines: 
    capline.set_linewidth(10) 
    capline.set_color('red') 

pp.draw() 

Niestety, ten aktualizuje kolor czapki, ale nie nie zmiana szerokości linii z czapki!

Uzyskany efekt jest podobny do „tłuszcz błędach linii Bar/cienkie czapki” na poniższym obrazie: enter image description here

Byłoby miło mieć „tłuszcz” czapki barze, w przypadku; jak to zrobić, w Matplotlib? Nałożenie kreski paska "ręcznie", jeden po drugim przy użyciu plot(), będzie działało, ale najłatwiej byłoby zastosować prostszą alternatywę.

Odpowiedz

9

ta opiera się na odpowiedzi @ Joaquin, ale trochę bardziej zwięzły (jeśli chcesz po prostu zwykły czapki Błąd bez specjalnej stylizacji):

distance = [1,3,7,9] 
energy = [10,20,30,40] 
sigma = [1,3,2,5] 

plt.errorbar(distance, 
    energy, 
    sigma, 
    capsize=5, 
    elinewidth=2, 
    markeredgewidth=2) 

enter image description here

29

EOL, byłaś bardzo blisko ..,

distance = [1,3,7,9] 
energy = [10,20,30,40] 
sigma = [1,3,2,5] 

(_, caps, _) = plt.errorbar(distance, energy, sigma, capsize=20, elinewidth=3) 

for cap in caps: 
    cap.set_color('red') 
    cap.set_markeredgewidth(10) 

plt.show 

enter image description here

set_markeredgewidth ustawia szerokość linii kapitalizacji.

Obiekty Matplotlib mają tak wiele cech, że często trudno jest zapamiętać właściwe dla danego obiektu. IPython jest bardzo przydatnym narzędziem do introspekcji matplotlib. Użyłem go do analizy właściwości 2Dlines odpowiadających liniom limitu błędów i znalazłem to i inne właściwości markera.

Cheers

+0

dzięki dużo ! Użyliśmy tej samej metody, ale jakoś przeoczyłem 'set_markeredgewidth'. :) Tak więc czapki są w rzeczywistości znacznikami, dla Matplotlib, w przeciwieństwie do linii 2D. Wydaje mi się, że argument "wywrotki" z 'errorbar()' jest równoważny 'cap.set_markersize()', więc ten drugi może zostać usunięty, nie? – EOL

+0

Podczas komentowania zdałem sobie również z tego sprawę. Zmieniłem także obraz. – joaquin

+0

@joaquin, jak używać iPython do "introspekcji matplotlib". To brzmi jak bardzo przydatna umiejętność. – Blink

Powiązane problemy