在matplotlib中减去两个图

时间:2018-07-03 22:07:16

标签: python-2.7 matplotlib subtraction

我想减去两个图,但是遇到一些错误。我的代码如下:

通常:

for dataset in [Bxfft]:
    dataset = np.asarray(dataset)
    freqs, psd = signal.welch(dataset, fs=52718/300, window='hamming', nperseg=16384, scaling='spectrum')
    plt.semilogy(freqs[5:4600], psd[5:4600]/dataset.size**0, color='r', label='Bx')

    x = freqs[5:361]
    y = psd[5:361]
    x2 = freqs[5:4600]
    y2 = psd[5:4600]

我要完成的工作是减去x2 - xy2 - y。我尝试通过两种方法执行此操作,但出现了一些错误:

  1. o = x-x2[:,:361] o2 = y-y2[:,:361] plt.semilogy(o, o2 / dataset.size ** 0, color='r', label='Bx')

错误看起来像这样:

  

回溯(最近通话最近):文件   “ S:/Doktorat/Python/Data/Dekomp/substraction.py”,第57行,在       o = x-x2 [:,:4800] IndexError:数组的索引过多

  1. o = x2-x o2 = y2-y plt.semilogy(o, o2 / dataset.size ** 0, color='r', label='Bx')

错误看起来像这样:

  

回溯(最近通话最近):文件   “ S:/Doktorat/Python/Data/Dekomp/substraction.py”,第57行,在       o = x2-x ValueError:操作数不能与形状(4595,)(356,)一起广播

任何想法怎么办?

2 个答案:

答案 0 :(得分:1)

您的xx2yy2数组似乎是一维的,

所以您的第一个直觉是正确的,但是您必须对要减去的数组切片进行小的校正:

o = x-x2[:356] # 361-5 = 356
o2 = y-y2[:356]

一个可行的例子是:

import numpy as np

freqs = np.random.rand(4600)
psd = np.random.rand(4600)

x = freqs[5:361]
y = psd[5:361]
x2 = freqs[5:4600]
y2 = psd[5:4600]

o = x-x2[:356]
o2 = y-y2[:356]

编辑绘图示例:

import numpy as np
import matplotlib.pyplot as plt

freqs = np.random.rand(4600)
psd = np.random.rand(4600)

x = freqs[5:361]
y = psd[5:361]
x2 = freqs[5:4600]
y2 = psd[5:4600]

o = abs(x-x2[1:357])
o2 = abs(y-y2[1:357])

plt.semilogy(o, o2, '*',color='r', label='Bx')

plt.show()

阵列切片说明

根据您的代码,您有2个数组(freqpsd),每个数组都是一维的,并且至少包含4600个值。

完成时

x = freqs[5:361]
x = psd[5:361]

您要提取从5位到第361位的所有值,xy因此分别包含356个值。

当您这样做时:     x2 =频率[5:4600]     y2 = psd [5:4600]

您正在提取从5个位置(与之前相同)到第4600个位置的所有值,x2y2因此分别包含3595个值

稍后,您尝试使用x2首先减去xx2[:,:361],这意味着您实际上认为x2是2d数组,结果是1d错误。

然后,您尝试做o = x2-x,但由于x包含356个值,而x2包含3595个值,python不知道该怎么做。

例如,如果您想在一个非常简单的示例中将前三个值减去后三个值,则可以执行以下操作:

freq = np.array([3,3,3,2,2,2])
x1 = freq[0:3] # x1 =  array([3, 3, 3])
x2 = freq[3:6] # x2 =  array([2, 2, 2])

result = x1 - x2 # result = array([1, 1, 1])

答案 1 :(得分:0)

其简单矩阵问题。作为基本矩阵运算,例如减法和加法运算只能在两个矩阵具有相同的维数时执行,而您的情况则不同。 这就是错误所在的原因。 您需要将较大的矩阵更改为较小的维度,以便将两者相减。