在不使用scipy.interpolate.griddata的情况下,插值pyplot中的NaN值

3
我想知道如何在不插值数据本身的情况下,对plt.contourf图进行插值。问题是,当我尝试scipy.interpolate.griddata时,由于我的数据太长,需要花费很长时间。
我想知道是否有一种方法可以通过pyplot或其他更快的方式来绘制具有NaNs的数据而不显示这些空白区域。
例如:
如果我有:
import numpy as np.
from numpy import nan
import matplotlib.pyplot as plt

a = np.array([[  9.,   3.,   2.,   5.,   9.,   3.,   2.,   5.],
              [  3.,  nan,   5.,   1.,   3.,  nan,   5.,   1.],
              [  5.,   8.,   2.,   9.,   5.,   8.,   2.,   9.],
              [  9.,   3.,   2.,   5.,   9.,   3.,   2.,   5.],
              [  3.,  nan,   5.,   1.,   3.,  nan,   5.,   1.],
              [  5.,   8.,   2.,   9.,   5.,   8.,   2.,   9.],
              [  9.,   3.,   2.,   5.,   9.,   3.,   2.,   5.],
              [  3.,  nan,   5.,   1.,   3.,  nan,   5.,   1.],
              [  5.,   8.,   2.,   9.,   5.,   8.,   2.,   9.],
              [  9.,   3.,   2.,   5.,   9.,   3.,   2.,   5.],
              [  3.,  nan,   5.,   1.,   3.,  nan,   5.,   1.],
              [  5.,   8.,   2.,   9.,   5.,   8.,   2.,   9.]])

xa = np.arange(8)+2

ya = -np.arange(12)

plt.figure()
plt.contourf(xa,ya,a,100)
plt.show()

我要:

enter image description here

我希望更轻松、更快速地填写这些空白...

1个回答

2
Pandas拥有出色的插值接口,您只需执行以下操作即可:
import pandas as pd

a_interp = pd.DataFrame(a).interpolate(method='linear', axis=0).values
plt.contourf(xa, ya, a_interp, 100)
plt.show()

enter image description here


它解决了我的问题。你知道为什么这种方法比scipy.interpolate.griddata快得多吗? - iury simoes-sousa
2
@IurySimões 很抱歉回复晚了,这是因为该方法不会插值出一个全新的网格,它只会在您已有的数值网格中插值 NaN 值所在的位置。 - Saullo G. P. Castro
你知道如何使用pandas进行插值,使其与griddata的网格相同吗?我问这个问题是因为这种方法可以通过某些轴进行插值。 - iury simoes-sousa
@IurySimões,不幸的是我不知道,你应该将其作为一个新问题详细说明...我相信会有一些朋友知道如何帮助你。 - Saullo G. P. Castro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接