如何在matplotlib中放大峰值?

时间:2015-07-07 15:59:18

标签: python arrays matplotlib plot

我有一个相对简单的问题。我有一组数据在某个位置有一个峰值。为了更清楚地绘制它,我想将数据乘以峰值。怎么办?作为一个例子,我想将所有值乘以11 <11。 x&lt;图17(其具有y> -0.1)乘以因子2.在我的实际数据中,我具有y值的条件,例如y> Y0

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1, 20, 100)
y = np.sin(x)/x

plt.plot(x,y,'-ob',lw=2,markersize=12)

plt.show()

提前谢谢!

2 个答案:

答案 0 :(得分:2)

使用numpy数组,您可以使用二进制掩码。因此x < 11将创建一个布尔数组,您可以将其用作选择掩码。由于您有多种条件,因此必须使用np.logical_and

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1, 20, 100)
y = np.sin(x)/x
selection = np.logical_and(x > 11, x < 17, y < 0)
y[selection] = y[selection]*2

plt.plot(x, y, '-ob', lw=2, markersize=12)

plt.show()

答案 1 :(得分:1)

我不确定您要完成的是什么,但您可以使用np.where选择数组中的特定索引,这些索引对应于条件(即11<x<20 )。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1, 20, 100)
y = np.sin(x)/x

plt.plot(x, y, '-ob', lw=2, markersize=12)

i = np.where( (x>11) & (x<20) & (y>-0.1))  
y[i]*=2

plt.plot(x, y, 'g', lw=2)
plt.show()

修改
另外,请参阅@hitzg有关直接创建二进制掩码的注释。因此,代码可以缩短为:

y[(x>11) & (x<20) & (y>-0.1)]*=2

enter image description here