2010-05-15 63 views
5

I matplotlib in Python verwenden eine Linie mit Fehlerbalken zu plotten, wie folgt:making Fehlerbalken in matplotlib mit Python nicht abgeschnitten

plt.errorbar(xvalues, up_densities, yerr=ctl_sds, fmt='-^', lw=1.2, markersize=markersize, 
     markeredgecolor=up_color, color=up_color, label="My label", clip_on=False) 
plt.xticks(xvalues) 

I setzte die Zecken auf der x-Achse "xticks" verwendet wird. Die Fehlerbalken des letzten Punkts in xvalues ​​(d. H. Xvalues ​​[-1]) werden jedoch rechts abgeschnitten - was bedeutet, dass nur ein halber Fehlerbalken angezeigt wird. Dies gilt auch für die Option clip_on = False. Wie kann ich das beheben, so dass die Fehlerbalken vollständig erscheinen, obwohl ihre rechte Seite technisch außerhalb von xvalues ​​[-1] liegt?

danke.

Antwort

10

In matplotlib, muss der größte Teil der detaillierten Kontrolle über die Künstler zu tun. Ich denke, das sollte das tun, was Sie wollen:

import matplotlib.pyplot as plt 
from random import uniform as r 

x = range(10) 
e = plt.errorbar(x, [r(2,10) for i in x], [r(.1,1) for i in x], capsize=8, color='r') 

for b in e[1]: 
    b.set_clip_on(False) 

plt.show() 

enter image description here

Das Problem, das Sie haben wurden, ist, dass das clip_on Schlüsselwort benutzt wurde, um die Markierungen zu steuern und nicht die Fehlerbalken. Zur Steuerung der Fehlerleisten gibt plt.errorbar ein Tupel zurück, wobei das zweite Element eine Liste von Fehlerbalken ist. Also hier gehe ich durch die Liste und schalte den Ausschnitt für jede Fehlerleiste ab.

+0

Sehr schön. Ich habe genau dasselbe versucht, habe aber nichts gesehen, weil ich nicht richtig gezeichnet habe. –

+3

Beachten Sie, dass dies nur für die Caps funktioniert. Wenn der Balken selbst halbiert wird (wie Sie sehen werden, wenn Sie die Achsen ausschalten), müssen Sie das Gleiche für alle b in e [2] tun. – Peter

+0

@Peter: Guter Punkt. Vielen Dank. – tom10

1

Ist das was du meinst? Wollen Sie die horizontalen Grenzen Ihrer Handlung neu definieren?

plt.errorbar(range(5), [3,2,4,5,1], yerr=[0.1,0.2,0.3,0.4,0.5]) 
ax = plt.gca() 
ax.set_xlim([-0.5,4.5]) 

Matplotlib errorbar http://up.stevetjoa.com/errorbar.png

+0

Nein, ich möchte, dass das letzte Häkchen bei 4 steht (in Ihrem Beispiel) und die horizontale X-Achse damit endet. Die horizontalen Linien an den Enden der Fehlerbalken werden etwas über das Ende der X-Achse hinausreichen, aber clip_on = False sollte diese dennoch sichtbar machen ... obwohl sie dies nicht tun. Irgendwelche Ideen, wie ich das machen kann? – user248237dfsf

Verwandte Themen