Matplotlib仅在两个x值之间的曲线下填充区域

时间:2014-10-01 18:39:20

标签: python-2.7 matplotlib

我想在水平轴上的两个值之间的某些曲线下填充区域。我试过了

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 个答案:

答案 0 :(得分:5)

发生此错误是因为

x > -3 and x < -2

是一个模糊的numpy表达式,因此它引发了错误。相反,你想要

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

其他选项是使用logical_andbitwise_and(甚至*应该有效)。