2017-12-16 3 views
0

비대칭 에러 막대가있는 plt.errorbar을 사용하여 for 루프를 사용하여 일부 배열을 플롯하려고합니다. 이 예제에서는 인덱스없이 배열을 사용하는 것이 더 쉬울 것이라는 것을 알고 있지만 인덱스 i에 대한 조건이있는 다른 코드에서 plt.errorbar의 인덱스를 사용하고 싶습니다.matplotlib plot for 인덱스가있는 for 루프의 비대칭 에러 막대

import numpy as np 
    import matplotlib.pyplot as plt 


    x=[ 0.007206, 0.043695, 0.372777, 0.464819, 0.337386, 0.249215, 0.395453, 
     0.222331, 0.11715, 0.101464, 0.645596, 0.228634, 0.187252, 0.283026, 
     0.596368, 0.019066, 0.300215, 0.174883, 0.331613, 0.175409, 0.858567, 0.895389] 

    y=[ 0.327811, 33.3177,  1.36996, 41.9717,  1.18497, 1.05182, 2.28229, 
     0.424775, 1.11758, 4.5135,  2.70709, 1.26611, 10.8293,  4.92649, 
     31.4483,  0.403496, 1.14471, 1.72301, 12.081,  0.501048, 13.6858, 
     4.58709 ] 

    xel=[ 0.034065, 0.096869, 0.046961, 0.13575, 0.086615, 0.070706, 0.068376, 
     0.132277, 0.12079, 0.102303, 0.048192, 0.070823, 0.067665, 0.07266, 
     0.093411, 0.040662, 0.089356, 0.098089, 0.137559, 0.146229, 0.038649, 
     0.030372] 
    xeu=[ 0.032612, 0.092047, 0.04424, 0.151329, 0.077828, 0.066373, 0.065701, 
     0.123756, 0.09371, 0.086466, 0.047322, 0.069837, 0.070206, 0.058787, 
     0.088777, 0.045837, 0.098174, 0.105,  0.148259, 0.14845, 0.133334, 
     0.104611] 

    for i in range(21): 
     plt.errorbar(x[i], y[i], xerr=[xel[i],xeu[i]], fmt='.') 

    plt.show() 

출력 오류는 다음과 같습니다 : 또한

ValueError: err must be [ scalar | N, Nx1 or 2xN array-like ] 

내가 그것을 작동 대칭 errorbars (plt.errorbar(x[i], y[i], xerr=xallel[i]))을 시도 할 경우

은 예제 코드입니다. 그래서 나는 문제가 어디 있는지 이해하지 못한다.

루프 상단에 색인 i의 조건을 추가해야하므로 색인이 필요합니다. 예 :

for i in range(21): 
    if y[i]<1.0: 
     plt.errorbar(x[i], y[i], xerr=[xel[i], xeu[i]], fmt='.', color='red') 
    else: 
     plt.errorbar(x[i], y[i], xerr=[xel[i], xeu[i]], fmt='.', color='b') 

어떻게 해결할 수 있습니까? 저는 아나콘다 파이썬 3.6을 사용하고 있습니다.

xerr=[[xel[i]],[xeu[i]]] 

당신은하기 matplotlib 일반적으로뿐만 아니라 루프를 방지 할 수 있습니다 한 번에 여러 값을 플로팅 지원 :

답변

1

귀하의 xerr 배열 × n 개의하지, 2 ×해야합니다.

plt.errorbar(x, y, xerr=[xel,xeu], fmt='.') 
+0

예 인덱스없이 모든 데이터를 플로팅 할 수 있지만 인덱스가 필요하다는 것을 알고 있습니다. 이것은 복잡한 문제에 대한 간단한 예입니다 ... –

+0

위의 코드는 인덱스없이 플롯 할 수있게합니다. – GWW

+0

죄송하지만 인덱스에 조건을 추가하면 (예 :'if y [i] <1.0'), 이 솔루션은 y 배열의 모든 점을 그립니다. –