如何过滤数组中不需要的值以进行绘图?使用numpy数组的matplotlib中的ValueError

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何过滤数组中不需要的值以进行绘图?使用numpy数组的matplotlib中的ValueError相关的知识,希望对你有一定的参考价值。

我正在基于OOP的一些代码中处理一个新例程,并在修改数据数组时遇到问题(代码的简短示例如下)。

基本上,这个例程是关于获取数组R,转置它然后对它进行排序,然后过滤掉低于预定值thres的数据。然后,我将这个数组重新转换回原始维度,然后用T的第一个元素绘制每个行。

import numpy as np
import matplotlib.pyplot as plt

R = np.random.rand(3,8)
R = R.transpose() # transpose the random matrix
R = R[R[:,0].argsort()] # sort this matrix
print(R)

T = ([i for i in np.arange(1,9,1.0)],"temps (min)")

thres = float(input("Define the threshold of coherence: "))

if thres >= 0.0 and thres <= 1.0 :
        R = R[R[:, 0] >= thres] # how to filter unwanted values? changing to NaN / zeros ?
else :
        print("The coherence value is absurd or you're not giving a number!")

print("The final results are ")
print(R)
print(R.transpose())
R.transpose() # re-transpose this matrix

ax = plt.subplot2grid( (4,1),(0,0) )
ax.plot(T[0],R[0])
ax.set_ylabel('Coherence')

ax = plt.subplot2grid( (4,1),(1,0) )
ax.plot(T[0],R[1],'.')
ax.set_ylabel('Back-azimuth')

ax = plt.subplot2grid( (4,1),(2,0) )
ax.plot(T[0],R[2],'.')
ax.set_ylabel('Velocity
km/s')
ax.set_xlabel('Time (min)')

但是,我遇到了一个错误

ValueError: x and y must have same first dimension, but have shapes (8,) and (3,)

我评论我认为问题可能存在的部分(如何过滤不需要的值?),但问题仍然存在。

如何绘制这两个数组(R和T),同时仍然可以过滤掉低于thres的不需要的值?我可以将这些不需要的值转换为零或NaN,然后​​成功绘制它们吗?如果是的话,我该怎么做?

非常感谢您的帮助。

答案

在技​​术朋友的帮助下,通过保留这一部分可以简单地解决问题

R = R[R[:, 0] >= thres]

因为删除不需要的元素比将它们更改为NaN或零更为可取。然后通过在此部分中添加稍作修改来修复绘图问题

ax.plot(T[0][:len(R[0])],R[0])

以及随后的绘图部分。这将T切成与R相同的尺寸。

以上是关于如何过滤数组中不需要的值以进行绘图?使用numpy数组的matplotlib中的ValueError的主要内容,如果未能解决你的问题,请参考以下文章

如何比较 2 个数组中的值以过滤掉元素

如何在 python 中读取多个 wav 文件,并转换为 numpy 数组进行绘图

字典键和值以分隔 numpy 数组

NSSet 在使用 SetWithArray 时如何比较数组中的值以删除重复项

使用数组进行 Numpy 过滤

python 将alphaMELTS输出文件读入numpy数组以进行绘图和分析