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

svmlkihl  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(70)

我有一些数据,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'
我还意识到,如果我在plt.errorbar函数内部的numpy数组上使用.tolist()函数,错误不会发生,当我想象这应该等同于使用列表时。例如:

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()


为什么会这样呢?

ndh0cuux

ndh0cuux1#

我认为numpy自动将None视为对象dtype数组,因为通常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错误。

相关问题