Matplotlib插值空白像素

时间:2018-09-01 01:35:20

标签: matplotlib scipy interpolation

我有一个文件“ mydata.tmp”,其中包含3个这样的列:

3.81107 0.624698 0.000331622 
3.86505 0.624698 0.000131237 
3.91903 0.624698 5.15136e-05 
3.97301 0.624698 1.93627e-05 
1.32802 0.874721 1.59245 
1.382   0.874721 1.542
1.43598 0.874721 1.572 
1.48996 0.874721 4.27933 

然后我要制作一个热图颜色图,其中前两列是坐标,第三列是该坐标的值。

此外,我想在对数刻度中设置第三列。

我已经做到了

import pandas as pd
import matplotlib.pyplot as plt
import scipy.interpolate
import numpy as np
import matplotlib.colors as colors

# import data
df = pd.read_csv('mydata.tmp', delim_whitespace=True, 
                 comment='#',header=None,
                 names=['1','2','3'])

x = df['1']
y = df['2']
z = df['3']

spacing = 500
xi, yi = np.linspace(x.min(), x.max(), spacing), np.linspace(y.min(), 
                 y.max(), spacing)

XI, YI = np.meshgrid(xi, yi)

rbf = scipy.interpolate.Rbf(x, y, z, function='linear')

ZI = rbf(XI, YI)

fig, ax = plt.subplots()

sc = ax.imshow(ZI, vmin=z.min(), vmax=z.max(), origin='lower',
        extent=[x.min(), x.max(), y.min(), 
                y.max()], cmap="GnBu", norm=colors.LogNorm(vmin=ZI.min(),
                vmax=ZI.max()))

fig.colorbar(sc, ax=ax, fraction=0.05, pad=0.01)

plt.show()

我得到这张图片 enter image description here

具有所有这些空白像素。

我正在寻找这样的东西(我用GNUplot完成了另一幅图片): enter image description here

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以使用cmap.set_bad为NaN值定义颜色:

echo "<html>\n<body>\n</body>\n</html>\n";

结果是:

example_with_set_bad

我也将使用griddata而不是RBF方法进行插值。然后,可以将输入数据区域外的点(即凸包)设置为NaN。