Python 2.7 在matplotlib中减去两个绘图
我想减去两个图,但我遇到了一些错误。我的代码如下所示: 一般而言:Python 2.7 在matplotlib中减去两个绘图,python-2.7,matplotlib,subtraction,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.
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-x
和y2-y
。我试着用两种方法来做这件事,但我犯了一些错误:
o=x-x2[:,:361]
o2=y-y2[:,:361]
plt.符号学(o,o2/dataset.size**0,color='r',label='Bx')
o=x2-x
o2=y2-y
plt.符号学(o,o2/dataset.size**0,color='r',label='Bx')
你知道怎么做吗?这是一个简单的矩阵问题。因为基本的矩阵运算,如减法和加法,只能在两个矩阵具有相同的维度时执行,而在您的情况下则不是。 这就是错误存在的原因。
您需要将较大的矩阵更改为较低的维度,以便将两者相减。您的
x
,x2
,y
,y2
数组似乎是一维的
因此,您的第一个直觉是正确的,但您必须对要减去的数组切片进行一个小的更正:
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()
阵列切片说明
根据您的代码,您有两个数组(freq
和psd
),每个数组都是一维数组,至少包含4600个值
当你这样做的时候
x = freqs[5:361]
x = psd[5:361]
您正在提取从5位到第361位的所有值,x
和y
因此每个值包含356个值
当您这样做时:
x2=频率[5:4600]
y2=psd[5:4600]
您正在提取从5个位置(与之前相同)到4600个位置的所有值,x2
和y2
因此每个位置包含3595个值
稍后,您尝试先使用x2[:,:361]
减去x2
和x
,这意味着您将x2
视为一个2d数组,而实际上它是1d,这会导致错误
然后尝试执行o=x2-x
,但由于x
包含356个值,而x2
包含3595个值,python不知道该怎么做
例如,在一个非常简单的示例中,如果您想将前3个值减去以下3个值,您可以执行以下操作:
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])
减法很有效,但绘图是空的,我得到这个错误:UserWarning:数据没有正值,因此无法进行对数缩放。“数据没有正值,因此不能是”问题是我不确定要绘制的值是什么,现在的示例将数组的每个值减去自身,从而生成一个无法在日志图中表示的零数组。