我有一些数据,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()
型
为什么会这样呢?
1条答案
按热度按时间ndh0cuux1#
我认为numpy自动将
None
视为对象dtype数组,因为通常None
在数值数组中不是有效值。当您使用tolist()
时,numpy也有助于转换,并将None
值转换为np.nan
(不是数字),这是一个有效的数值。您可以在列表中使用
np.nan
而不是None
:字符串
Matplotlib仍然不会绘制它,你也不会得到
unsupported operand type
错误。