我有一些数据,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()

为何会是这样呢?

推荐答案

我认为NumPy会自动将None视为对象dtype数组,因为通常None在数字数组中不是有效值.当您使用tolist()时,NumPy也有助于转换,并将None值转换为np.nan(不是A数字),这是一个有效的数值.

您可以在列表中使用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错误.

Python相关问答推荐

从流程获取定期更新

修剪Python框架中的尾随NaN值

为什么我的主页不会重定向到详细视图(Django)

回归回溯-2D数组中的单词搜索

将嵌套列表的字典转换为数据框中的行

在Transformer中使用LabelEncoding的ML模型管道

为什么dict(id=1,**{id:2})有时会引发KeyMessage:id而不是TypMessage?

有什么方法可以避免使用许多if陈述

如何使用矩阵在sklearn中同时对每个列执行matthews_corrcoef?

在Python和matlab中显示不同 colored颜色 的图像

返回nxon矩阵的diag元素,而不使用for循环

如何使用scipy从频谱图中回归多个高斯峰?

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

如何避免Chained when/then分配中的Mypy不兼容类型警告?

如何列举Pandigital Prime Set

大小为M的第N位_计数(或人口计数)的公式

Python键入协议默认值

ThreadPoolExecutor和单个线程的超时

在Python中使用if else或使用regex将二进制数据如111转换为001""

如何使用OpenGL使球体遵循Python中的八样路径?