为什么使用 numpy 数组时可以绘制包含 None 值的数据数组,但使用 list 时却不能?

问题描述 投票:0回答:1

我有一些数据,X 和 Y,我想将其简单地绘制为 X 与 Y。

但是,对于 Y 的某些元素,没有数据。我将其记录为

None
而不是 0,因为 matplotlib 不会绘制它(我不想画一条线向下到零并返回)。

如果我这样做,我注意到这会起作用:

import numpy as np
import matplotlib.pyplot as plt
X = np.array([1,2,3,4])
Y = np.array([1,2,3,None])
Y_ERR = np.array([1,1,1,None])
plt.errorbar(X, Y, yerr = Y_ERR)
plt.show()

但是,当我使用列表代替时,我收到错误:

X = [1,2,3,4]
Y = [1,2,3,None]
plt.errorbar(X, Y, yerr = Y_ERR)
plt.show()

TypeError: unsupported operand type(s) for -: 'NoneType' and 'NoneType'

我还意识到,如果我在

.tolist()
函数内的 numpy 数组上使用
plt.errorbar
函数,则不会发生错误,当我想象这应该相当于使用列表时。例如:

X = np.array([1,2,3,4])
Y = np.array([1,2,3,None])
Y_ERR = np.array([1,1,1,None])
plt.errorbar(X.tolist(), Y.tolist(), yerr = Y_ERR.tolist())
plt.show()

为什么会这样?

python list numpy matplotlib
1个回答
0
投票

我认为 numpy 自动将

None
视为对象数据类型数组,因为通常
None
不是数值数组中的有效值。当您使用
tolist()
时,numpy 还可以帮助进行转换,并将
None
值转换为
np.nan
(不是数字),这是一个有效的数值。

您可以在列表中使用

np.nan
代替
None
:

import numpy as np
import matplotlib.pyplot as plt

X = [1, 2, 3, 4]
Y = [1, 2, 3, np.nan]
Y_ERR = [1, 1, 1, np.nan] 

plt.errorbar(X, Y, yerr=Y_ERR)
plt.show()

这仍然是 matplotlib 不会绘制它,并且你不会得到

unsupported operand type
错误。

© www.soinside.com 2019 - 2024. All rights reserved.