【问题标题】:Plot non continuous data with lines using python matplotlib使用 python matplotlib 用线条绘制非连续数据
【发布时间】:2019-03-25 15:46:46
【问题描述】:

我需要用 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')

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

【问题讨论】:

    标签: python list matplotlib


    【解决方案1】:

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

    我将使用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 值的位置,并在这些区域上绘制线条。

    【讨论】:

    • 这听起来很有希望,我忘了显示定义,plens 只是一个列表,[15, 20, 25, 30, 35, 40],所以我的最终数据 polyplot 是 6 个列表值也是如此,就像您指定的那样。我会试一试,看看是否成功。
    • 听起来不错。只需将 15 放入 x,就发现我里面只有 5 个值。
    • 对我不起作用,我得到了一个非常奇怪的情节,值都是错误的,它在 0 和 1 之间跳跃,所以我认为它正在为 ~np.isnan 绘制一个真值表。 imgur.com/pEInB52
    • 呵呵——你确定你在绘制y[y_not_nan_inds] 而不仅仅是y_not_nan_inds
    • 是的,我就是这样做的,我发帖后才意识到哈哈,对不起。
    猜你喜欢
    • 1970-01-01
    • 2017-06-20
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多