【问题标题】:matplotlib: fill_between function, how to 'Interpolate' and 'where' correctly?matplotlib:fill_between 函数,如何正确“插值”和“位置”?
【发布时间】:2015-08-10 03:15:44
【问题描述】:

matplotlib 折线图的值数组长度可能不规则,例如:

[18,17,0,0,2]
[6,4,0,0]
[3]

这些是时间线上的值,最后一个是最新的,每个值对应于一周。因此,这意味着第二个用户比第一个晚一周加入,而最后一个用户只在上周加入。

为了绘制折线图,​​我用 None 值填充较小的数组(与fill_between 并不真正相关)。

[18, 17, 0, 0, 2]
[None, None, None, None, 3]
[None, 6, 4, 0, 0]

我正在使用interpolate=True,因为如果值变为零,我需要填充曲线。 但是,这会产生意想不到的效果,对于后来开始的人来说,填充也会进行插值,从 0 开始到实际值。

如果有实际值,我需要它来填充空间:

这可以吗?我查看了docs,它说明了 where 数组。

这是给定图表的 where 数组的结构:

[True, True, False, False, True, False]
[False, True, True, False, False, False]
[False, False, False, False, True, False]

如您所见,我将第二个值行的第一个 where 元素设置为 False,但由于“interpolate=True”,它将开始填充...

(颜色代码:第一排蓝色,第二排绿色,第三排红色)

希望任何天使都可以帮助解决这个问题......

这是填充的实际代码:

for i, values in enumerate(time_series):
    ax.plot(x, y[i], ',-', label=label, color=linecolor, markersize=8, fillstyle="full",linewidth=1.5, clip_on=True, zorder=200)
    ax.fill_between(x, 0, zero_y, where=where, color=fillcolors[i], alpha=0.8, edgecolor="white", zorder=zorder[i], interpolate=True)

请注意,fill_between 在输入 None 值时实际上崩溃了...我需要将 None 值“转换”为 0...这可能会使问题更加复杂...

【问题讨论】:

  • 尝试将Nonenp.nan 相匹配,这是浮点“非数字”填充值

标签: python matplotlib


【解决方案1】:

内部 mpl 将您的列表转换为np.ndarray。 'not a number'(可用于缺失数据)的正确值是np.nan。将所有None 替换为np.nan 即可解决问题。

【讨论】:

    猜你喜欢
    • 2021-05-30
    • 2018-04-14
    • 2021-03-24
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2014-03-19
    • 1970-01-01
    相关资源
    最近更新 更多