Límites superiores / inferiores con matplotlib

Quiero trazar algunos puntos de datos con barras de error. Algunos de estos puntos de datos solo tienen un límite superior o inferior, en lugar de barras de error.

Así que estaba tratando de usar índices para diferenciar entre los puntos con barras de error y los puntos con límites superiores / inferiores. Sin embargo, cuando bash algo como esto:

errorbar(x[i], y[i], yerr = (ymin[i], ymax[i])) 

Recibo el error:

 ValueError: In safezip, len(args[0])=1 but len(args[1])=2 

Esto es similar a la discusión aquí , pero no uso pandas, y sin embargo, sería muy útil para mí leer algunas otras palabras sobre eso.

En cualquier caso, intenté “cambiar” el error de la siguiente manera:

 errorbar(x[i], y[i], yerr = [[ymin[i], ymax[i]]], uplims = True) 

Pero el gráfico resultante no está claro: parece que el límite superior Y las barras de error se trazan juntos, o el límite superior se traza dos veces …

El objective es trazar los límites superior / inferior cuando las barras de error superior e inferior no son simétricas, por lo que puedo elegir la longitud de la barra antes de la flecha para el límite superior / inferior.

Esta es en realidad una de las cosas que más me molesta acerca de la barra de errores: es muy delicada acerca de la forma y la dimensionalidad de las entradas.

Lo que asumo es que usted quiere “barras de error”, pero desea que sus ubicaciones se establezcan en los límites superior e inferior absolutos, en lugar de un valor de “error” simétrico.

Lo que hace la barra de errores es comprimir juntos (con safezip) su matriz yyerr [0] para el límite inferior (yerr [1] para la superior). Por lo tanto, su y y yerr [0] (y [1]) deben ser matrices con el mismo tamaño, forma y número de dimensiones. Yerr en sí no necesita ser una matriz en absoluto.

El primer código que tengas funcionará si x, y, ymin y ymax son todas matrices unidimensionales, que es lo que deberían ser. Parece que tu y no lo es.

Sin embargo, es importante tener en cuenta que dado que la barra de errores yerr son cantidades de error y no límites absolutos, debe sumr y restar su y de sus límites inferior y superior reales.

Por ejemplo:

 x = array([1,2,3,4]) y = array([1,2,3,4]) ymin = array([0,1,2,3]) ymax = array([3,4,5,6]) ytop = ymax-y ybot = y-ymin # This works errorbar( x, y, yerr=(ybot, ytop) ) 

Déjame saber si estoy malinterpretando algo. Sería bueno si pudiera publicar algunos datos de ejemplo en el formulario que está utilizando.