【问题标题】:Interpolate NaN values in pyplot without using scipy.interpolate.griddata在 pyplot 中插入 NaN 值而不使用 scipy.interpolate.griddata
【发布时间】:2014-07-15 11:26:43
【问题描述】:

我想知道如何在不插入数据本身的情况下插入 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()

我会:

我想更轻松、更快速地插入这些空白...

【问题讨论】:

    标签: python numpy matplotlib scipy interpolation


    【解决方案1】:

    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()
    

    【讨论】:

    • 它解决了我的问题.. 你知道为什么这个方法比 scipy.interpolate.griddata 快得多吗?
    • @IurySimões 对于迟到的回复感到抱歉,这是因为此方法不会插入一个全新的网格,它只会在您现有的值网格中有 NaN 值的地方插入
    • 你知道如何使用 pandas 插值到与 griddata 一样的网格吗?我问是因为这种方法你可以通过某个轴进行插值..
    • @IurySimões 不幸的是我不知道,你应该把这个作为一个新问题详细说明......我相信有些人会知道如何帮助你
    猜你喜欢
    • 2016-05-20
    • 2015-04-21
    • 1970-01-01
    • 2021-11-12
    • 2011-09-25
    • 1970-01-01
    • 2019-09-11
    • 2016-09-01
    相关资源
    最近更新 更多