我有一个文件“ 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()
具有所有这些空白像素。
我正在寻找这样的东西(我用GNUplot完成了另一幅图片):
我该怎么办?
答案 0 :(得分:1)
您可以使用cmap.set_bad
为NaN值定义颜色:
echo "<html>\n<body>\n</body>\n</html>\n";
结果是:
我也将使用griddata
而不是RBF方法进行插值。然后,可以将输入数据区域外的点(即凸包)设置为NaN。