python - 使用 NaN 绘制/创建数据集的散点图

标签 python matplotlib

我想用pylab画一个散点图,但是,我的一些数据是NaN,像这样:

a = [1, 2, 3]
b = [1, 2, None]

pylab.scatter(a,b) 不起作用。

有什么方法可以在不显示这些 NaN 值的情况下绘制具有实际值(value)的点?

最佳答案

如果您使用 NaN,一切都会完美无缺。 None 不是一回事。 NaN 是一个 float 。

举个例子:

import numpy as np
import matplotlib.pyplot as plt

plt.scatter([1, 2, 3], [1, 2, np.nan])
plt.show()

enter image description here

如果您想处理丢失的数据,请查看 pandas 或 numpy 屏蔽数组(以及 numpy.genfromtxt 以加载您的数据)。掩码数组内置于 numpy 中,但 pandas 是一个非常有用的库,并且具有非常好的缺失值功能。

举个例子:

import matplotlib.pyplot as plt
import pandas

x = pandas.Series([1, 2, 3])
y = pandas.Series([1, 2, None])
plt.scatter(x, y)
plt.show()

pandas 使用 NaN 来表示掩码数据,而掩码数组使用单独的掩码数组。这意味着掩码数组可能会保留原始数据,同时暂时将其标记为“缺失”或“错误”。但是,它们使用更多内存,并且有一个隐藏的陷阱,可以通过使用 NaN 表示丢失的数据来避免。

作为另一个示例,同时使用掩码数组和 NaN,这次使用线图:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 6 * np.pi, 300)
y = np.cos(x)

y1 = np.ma.masked_where(y > 0.7, y)

y2 = y.copy()
y2[y > 0.7] = np.nan

fig, axes = plt.subplots(nrows=3, sharex=True, sharey=True)
for ax, ydata in zip(axes, [y, y1, y2]):
    ax.plot(x, ydata)
    ax.axhline(0.7, color='red')

axes[0].set_title('Original')
axes[1].set_title('Masked Arrays')
axes[2].set_title("Using NaN's")

fig.tight_layout()

plt.show()

enter image description here

关于python - 使用 NaN 绘制/创建数据集的散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15754333/

相关文章:

python - 具有可自定义线宽的 Python 中的隐式绘图?

python matplotlib ,特定子图之间的间距

python - 在 matplotlib 中向时间轴添加填充

python - rawsql 相当于 django 查询集

python - 如何在运行 Django runserver 时自动运行测试?

matplotlib - 如何在matplotlib中将颜色条位置向右移动?

python - Jupyter 笔记本不再在外部窗口中打开 matplotlib 图?

python - Gnuplot:每行输入值绘制一个系列

python - 任何无需重命名列即可进行过滤的方法

python - 如何从包含整数和其他对象的列表中随机选择一个整数?