stackplot具有不同的x数据

时间:2016-12-26 17:10:21

标签: matplotlib

matplotlib中具有相同x数据的堆积绘图就像

一样简单
registration.pushManager.subscribe({ userVisibleOnly: true })
  .then(function (subscription) { /* ... */})
  .catch(function (err) { /* ... */})

是否可以使用不同的 gcm_sender_id数据堆叠两个图?

1 个答案:

答案 0 :(得分:2)

似乎不可能。如果您查看code for Matplotlib's stackplot,那么这是绘制堆积图本身的部分:

# Color between array i-1 and array i
for i in xrange(len(y) - 1):
    color = axes._get_lines.get_next_color()
    r.append(axes.fill_between(x, stack[i, :], stack[i + 1, :],
                               facecolor=color,
                               label= six.next(labels, None),
                               **kwargs))

因此它将始终对所有堆栈使用相同的x

另一方面,您可以为堆积图创建一个新的x数组,并包含来自所有不同x数组的所有值,然后使用线性计算丢失的y堆栈值内插。

使用插值的可能解决方案如下所示:

from matplotlib import pyplot as plt

def interp_nans(x, y):
    is_nan = np.isnan(y)
    res = y * 1.0
    res[is_nan] = np.interp(x[is_nan], x[-is_nan], y[-is_nan])
    return res

x = np.array([0.0, 0.5, 1.5, 2.0])

y0 = np.array([1.0, 1.5, np.nan, 1.0])
y1 = np.array([1.0, np.nan, 1.5, 1.0])

plt.stackplot(x, (interp_nans(x, y0), interp_nans(x, y1)))
plt.show()

但是如果在这种情况下不能使用插值,那么它将不起作用。