首页 > 解决方案 > 使用 python matplotlib 用线条绘制非连续数据

问题描述

我需要用 matplotlib 绘制数据,这是一个系列,但缺少一些值,所以它不是完全连续的。目前数据采用简单列表的形式,每个“N”值显示一个值,从 15 到 40,因此有一个这些值的列表,作为 x 信息传递给绘图命令。数据作为 y 信息的列表传递,并且当前拥有多个 numpy.nan,用于该集合没有数据的地方。

我需要做的是如图所示绘制它,除了我需要忽略丢失的数据点以及连接下一个数据点之间的线,例如 x=20 处的红色圆圈应连接到 x= 处的红色圆圈35,并且两个标记正在由相同的绘图命令绘制。

样本图

此代码需要绘制各种数据集,其中一些在 15 处没有数据,但需要显示没有数据,即为了清晰起见,轴保持不变,并且连接系列以显示趋势。

红圈数据的样本数据:

[numpy.nan, 6.3, numpy.nan, numpy.nan, 8.4, numpy.nan]

绿色圆圈数据的样本数据:

[numpy.nan, 4.1, 4.3, numpy.nan, 5.8, nunmpy.nan]

fig = plt.figure(figsize=(16,9))
ax = fig.add_subplot(111)
ax.plot(plens, polyplot, linestyle='--', marker='^', markersize=7.0, color='red')

我把多余的信息放在一边,比如颜色索引和标签,因为它们对问题并不重要。谢谢。

标签: pythonlistmatplotlib

解决方案


我要做的是从域和绘制的值中删除这些元素,就像这样。

我将使用y可能在 中的值polyplot,以及x您的域,这可能plens在脚本中被调用。

import numpy as np

x = np.array([15, 20, 25, 30, 35, 40]) # Gotten from the image
y = np.array([np.nan, 4.1, 4.3, np.nan, 5.8, np.nan]) # Red circle data
y_not_nan_inds = ~np.isnan(y)

ax.plot(x[y_not_nan_inds], y[y_not_nan_inds], ...)

在这里,我们将所有内容都放入 numpy 数组中,找到有y值的位置,并在这些区域上绘制线条。


推荐阅读