matplotlib:在点之间画线,忽略丢失的数据


问题内容

我有一组要绘制为折线图的数据。对于每个系列,缺少一些数据(但每个系列都不同)。当前,matplotlib不会绘制跳过丢失数据的线:例如

import matplotlib.pyplot as plt

xs = range(8)
series1 = [1, 3, 3, None, None, 5, 8, 9]
series2 = [2, None, 5, None, 4, None, 3, 2]

plt.plot(xs, series1, linestyle='-', marker='o')
plt.plot(xs, series2, linestyle='-', marker='o')

plt.show()

会导致图中的线条出现间隙。我该如何告诉matplotlib在空白处画线?(我宁愿不必插值数据)。


问题答案:

您可以通过以下方式屏蔽NaN值:

import numpy as np
import matplotlib.pyplot as plt

xs = np.arange(8)
series1 = np.array([1, 3, 3, None, None, 5, 8, 9]).astype(np.double)
s1mask = np.isfinite(series1)
series2 = np.array([2, None, 5, None, 4, None, 3, 2]).astype(np.double)
s2mask = np.isfinite(series2)

plt.plot(xs[s1mask], series1[s1mask], linestyle='-', marker='o')
plt.plot(xs[s2mask], series2[s2mask], linestyle='-', marker='o')

plt.show()

这将导致

情节