使用 matplotlib 在点之间画一条线,忽略丢失的数据

Draw a line between points, ignoring missing data, with matplotlib

这些年来已经问过许多类似的问题,比如这个 here,但是 none 已接受的答案解决了我的问题。

以下代码:

x=[0, 0.02, 0.05, 0.08, 0.11, 0.14]
y1=[31.15, None, 15.24, 11.65, 13.54, 9.55]
y2=[20.3, 14.2, 5.6, 3.10, 8.8, 10.45]
plt.plot(x, y1, linestyle='-',marker='o',color='red')
plt.plot(x, y2, linestyle='-',marker='o',color='blue')

产生这个情节:

但是,我想强制在 y1[] 的第一个和第三个元素之间画一条线,而不影响 y2[] 的绘制方式。这可能吗?我可以删除 x[] 的第二个元素,但这也会阻止我针对 y2[].

绘制 x[]

您可以使用一个简单的函数来只保留有效数据:

x=[0, 0.02, 0.05, 0.08, 0.11, 0.14]
y1=[31.15, None, 15.24, 11.65, 13.54, 9.55]
y2=[20.3, 14.2, 5.6, 3.10, 8.8, 10.45]

def dropnone(X, Y):
    return zip(*((a,b) for a,b in zip(X,Y) if None not in [a,b]))

plt.plot(*dropnone(x, y1), linestyle='-',marker='o',color='red')
plt.plot(*dropnone(x, y2), linestyle='-',marker='o',color='blue')

输出: