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

Posted

技术标签:

【中文标题】如何过滤数组中不需要的值以进行绘图?使用 numpy 数组的 matplotlib 中的 ValueError【英文标题】:How to filter unwanted values in arrays for plotting? ValueError in matplotlib using numpy arrays 【发布时间】:2019-09-01 21:21:55 【问题描述】:

我正在编写一些基于 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\nkm/s')
ax.set_xlabel('Time (min)')

但是,我遇到了一个错误

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

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

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

非常感谢您的帮助。

【问题讨论】:

尝试将您的T... 更改为T=([i for i in np.linspace(1,9, R.shape[1] )],"temps (min)"),并将其移至if ... else 块下方。它将解决不匹配尺寸错误。 感谢您的回答。从朋友那里得到了一些想法,它按我的意愿工作。 【参考方案1】:

在技术朋友的帮助下,保留这部分简单地解决了问题

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

因为删除不需要的元素比将它们更改为 NaN 或零更可取。然后通过在这部分添加轻微修改来解决绘图问题

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

以及随后的绘图部分。这会将 T 分割成与 R 相同的维度。

【讨论】:

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

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

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

如何从 WCF 打印数组的值以形成标签?

如何仅获取 index[0] 的值以显示 JSON 对象中的数组?

从数组中过滤字符串值以仅格式化数字

如何获取嵌套道具函数的值以进行单元测试