2010-05-15 15 views
5

estoy usando matplotlib en Python para trazar una línea con errorbars como sigue:decisiones no errorbars acortado en matplotlib con Python

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 establezca las garrapatas en el eje x el uso de "xticks". Sin embargo, las barras de error del último punto en xvalues ​​(es decir, xvalues ​​[-1]) están recortadas a la derecha, lo que significa que solo aparece la mitad de una barra de error. Esto es cierto incluso con la opción clip_on = False. ¿Cómo puedo solucionar esto, de modo que las barras de error aparecen en su totalidad, a pesar de que su lado derecho está técnicamente fuera de los valores x [-1]?

gracias.

Respuesta

10

En matplotlib, la mayor parte del control detallado necesita ser hecho a través de los artistas. Creo que esto debería hacer lo que quiera:

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

El problema que estaba teniendo es que la palabra clave clip_on estaba siendo utilizado para controlar los marcadores y no las barras de error. Para controlar las barras de error, plt.errorbar devuelve una tupla, donde el segundo elemento es una lista de barras de error. Así que aquí voy a la lista y desactivo el recorte para cada barra de error.

+0

Muy agradable. De hecho, probé exactamente lo mismo, pero no vi nada porque no estaba rediseñando correctamente. –

+3

Tenga en cuenta que esto solo funciona para las mayúsculas. Si la barra se está cortando por la mitad (como verá cuando apague los ejes), también debe hacer lo mismo para todo b en e [2]. – Peter

+0

@Peter: Buen punto. Gracias. – tom10

1

¿Es esto lo que quieres decir? ¿Quieres redefinir los límites horizontales de tu parcela?

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

No, quiero que la última marca esté en 4 (en su ejemplo) y el eje x horizontal termine en eso, sin que haya pasado nada. Las líneas horizontales en los extremos de las barras de error se extenderán un poco más al final del eje x, pero clip_on = False debería hacerlas visibles ... aunque no lo sean. ¿Alguna idea de cómo puedo hacer esto? – user248237dfsf

Cuestiones relacionadas