Python 当存在NaN时,matplotlib散射会移动颜色代码

Python 当存在NaN时,matplotlib散射会移动颜色代码,python,matplotlib,scatter,Python,Matplotlib,Scatter,我想用给定的颜色代码绘制一些数据。例如: x = np.array([0, 1, 2, 3]) b = np.array([1, 0, 2, 3]) colors = np.array(['g', 'r', 'b', 'y']) plt.scatter(x, b**2, color=colors) 很好,所有的点都出现了,每个点都有自己的颜色。 现在,缺少一些数据: plt.figure() plt.scatter(x, np.log10(b), color=colors) 问题来了:x=1

我想用给定的颜色代码绘制一些数据。例如:

x = np.array([0, 1, 2, 3])
b = np.array([1, 0, 2, 3])
colors = np.array(['g', 'r', 'b', 'y'])
plt.scatter(x, b**2, color=colors)
很好,所有的点都出现了,每个点都有自己的颜色。 现在,缺少一些数据:

plt.figure()
plt.scatter(x, np.log10(b), color=colors)
问题来了:x=1数据丢失(log(0)=NaN),但颜色跳过此点,x=2点为红色,而不是蓝色。 解决方案可以是:

y = np.log10(b)
mask = np.isfinite(y)
plt.scatter(x[mask], y[mask], color=colors[mask])

但是我觉得这样做很不舒服。。。还有其他方法吗?

使用c而不是颜色解决问题:

plt.scatter(x, np.log10(b), c=colors)
感谢github的员工:


C.

这似乎是个不错的方法。你能在github上报告这个问题吗?在我看来,数据被屏蔽似乎是错误的,但其他输入没有。好的,谢谢,我刚刚做了。记住在系统允许时接受你自己的答案。这是一个老问题,但我来这里是为了同样的问题。值得注意的是,此更正不适用于旧版本的matplotlib。(无论出于何种原因,我在一个使用2.0.0的系统上,尽管这已经不是最新版本了。)