2014-10-01 3 views
1

Я хотел бы заполнить область под некоторой кривой между двумя значениями только по горизонтальной оси. Я попыталсяОбласть заливки Matplotlib под кривой только между двумя значениями x

import matplotlib.pyplot as plt 
import numpy as np 
from scipy.stats import norm 

x = np.linspace(-4,4, 10000) 
nVals = [norm.pdf(i,0,1) for i in x] 

line = plt.plot(x,nVals) 

plt.fill_between(x,nVals,color = '#111111',where = x > -3 and x < -2) 
plt.axis([-4,4,0,.5]) 
plt.show() 

но он возвращает

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Я не понимаю, это сообщение; когда я бегу

z = -2.5 
print z > -3 and z < -2 

Python делает понять, что я имею в виду и печатает

True

Так почему это не работает с fill_between и как я могу решить это? произошло

+1

Включите минимальный фрагмент исходного кода, который может быть выполнен сам по себе, чтобы создать ошибку. – farenorth

+1

@farenort: Мне жаль, что это не было вопросом для публикации вопросов. – tom10

+0

В этом случае минимальный код является 'x = np.arange (7)' 'x < 5 and x > 2', поэтому это не является большой нагрузкой. – tacaswell

ответ

4

Эта ошибка, потому что

x > -3 and x < -2 

является неоднозначным NumPy выражение, так что возникает ошибка. Вместо этого вы хотите

(x > -3) & (x < -2) 

Другие варианты использования logical_and или bitwise_and (или даже * должен работать).

Смежные вопросы