python-2.7 - 在 matplotlib 中减去两个图
问题描述
我有两个要减去的图,但是遇到了一些错误。我的代码如下所示:
一般来说:
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.semilogy(o, o2 / dataset.size ** 0, color='r', label='Bx')
错误如下所示:
回溯(最后一次调用):文件“S:/Doktorat/Python/Data/Dekomp/substraction.py”,第 57 行,在 o = x-x2[:,:4800] IndexError:数组索引过多
o = x2-x o2 = y2-y plt.semilogy(o, o2 / dataset.size ** 0, color='r', label='Bx')
错误如下所示:
Traceback(最近一次调用最后一次):文件“S:/Doktorat/Python/Data/Dekomp/substraction.py”,第 57 行,在 o = x2-x ValueError:操作数无法与形状一起广播(4595,)( 356,)
有什么想法该怎么做?
解决方案
您的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()
数组切片解释
根据您的代码,您有 2 个数组(freq
和psd
),每个数组都是一维的,并且至少包含 4600 个值。
当你这样做
x = freqs[5:361]
x = psd[5:361]
您正在提取从第 5 个位置到第 361 个位置的所有值,x
因此y
每个值包含 356 个值。
当你这样做时:x2 = freqs[5:4600] y2 = psd[5:4600]
您正在提取从第 5 个位置(与以前相同)到第 4600 个位置的所有值,x2
因此y2
每个值包含 3595 个值
稍后您尝试减去x2
并x
首先使用x2[:,:361]
which 意味着您正在考虑x2
成为 2d 数组,而实际上它是 1d 会导致错误。
然后你尝试做o = x2-x
但是 asx
包含 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])
推荐阅读
- azure - 使用 Azure Key Vault 和 Spring Boot 的 SQL Server 列加密
- stm32 - 在 TrueStudio 中上传到 STM32 时如何修复“无法打开文件”
- python - 将列表与条件语句进行比较
- php - 在 Zend Form 中使用外部 FTP 服务器进行文件上传
- bootstrap-4 - Bootstrap 4 模态淡出屏幕但不显示
- r - 解析包含`:=`的表达式?
- php - 将 Laravel 通知的副本发送给管理员
- css - 我在 div 中的最后一个元素溢出,所以只有一半的元素是可见的
- javascript - 如何在 Typescript 中用静态变量表达构造函数?
- java - 是什么让 PdfStamper 在 cleanup() 之后从 pdf 中删除图像,尽管它不应该?