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 通过间隙画线? (我宁愿不必插入数据)。

原文由 gravenimage 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

您可以通过这种方式屏蔽 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()

这将导致

阴谋

原文由 Thorsten Kranz 发布,翻译遵循 CC BY-SA 3.0 许可协议

引用@Rutger Kassies( 链接):

Matplotlib 仅在连续(有效)数据点之间画一条线,并在 NaN 值处留下间隙。

如果您使用的是 Pandas ,一个解决方案:

 #pd.Series
s.dropna().plot() #masking (as @Thorsten Kranz suggestion)

#pd.DataFrame
df['a_col_ffill'] = df['a_col'].ffill()
df['b_col_ffill'] = df['b_col'].ffill()  # changed from a to b
df[['a_col_ffill','b_col_ffill']].plot()

原文由 Nasser Al-Wohaibi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏