跨2D网格的不均匀分布数据的插值

时间:2018-03-15 17:27:14

标签: python visualization interpolation heatmap

我希望有人可以指出我正确的方向......我对Python和编码很新。

作为项目的一部分,我已经对太阳能电池板表面上不同点的温度进行了采样,并记录了每个点的x和y位置,就像我以毫米为单位。所以我有一个面板表面的网格网格,由x和y数组创建,具有mm粒度。

我还有一个采样数据的矢量,测量位于各自的坐标处,否则用零填充。

我想在我知道的点之间平滑地插入数据并创建一个漂亮的热图。然而,几个小时后,在这里阅读答案和检查scipy文档,我只是不知道如何绘制它。

据我所知,RectBivariateSpline是我应该使用的,因为我的数据在常规网格上。

这是我到目前为止所做的:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import RectBivariateSpline

x = np.arange(0,481,1)
y = np.arange(0,544,1)

xmin, xmax = 0, 480
ymin, ymax = 0, 543


xi, yi = np.meshgrid(x,y)
Z = np.zeros_like(xi)

#Temperature samples
#row1
Z[520, 40] = 37.8       #B1
Z[520, 80] = 38         #C1
Z[520, 120] = 40        #D1

Z[520, 200] = 41        #G1
Z[520, 240] = 42.6      #H1
Z[520, 280] = 41        #I1

Z[520, 360] = 40        #L1
Z[520, 400] = 38        #M1
Z[520, 440] = 37.8      #N1

#row2
Z[475, 120] = 37.9      #D2
Z[475, 360] = 37.9      #L2

#row3
Z[430, 40] =33.4        #B3
Z[430, 440] = 33.4      #N3

#row4
Z[385, 120] = 34        #D4
Z[385, 240] = 41.4      #H4
Z[385, 360] = 34        #L4

#row6
Z[295, 40] = 35.6       #B6
Z[295, 120] = 36        #D6
Z[295, 240] = 43.2      #H6
Z[295, 360] = 36        #L6
Z[295, 440] = 35.6      #N6

#row7
Z[250, 40] = 33.7       #B7
Z[250, 80] = 31.3       #C7
Z[250, 120] = 35.2      #D7

Z[250, 200] = 39.1      #G7
Z[250, 240] = 40.5      #H7
Z[250, 280] = 39.1      #I7

Z[250, 360] = 35.2      #L7
Z[250, 400] = 31.3      #M7
Z[250, 440] = 33.7      #N7

#row8
Z[205, 40] = 33.9       #B8
Z[205, 80] = 32.4       #C8
Z[205, 120] = 33.4      #D8

Z[205, 200] = 39.8      #G8
Z[205, 240] = 42.4      #H8
Z[205, 280] = 39.8      #I8

Z[205, 360] = 33.4      #L8
Z[205, 400] = 32.4      #M8
Z[205, 440] = 33.9      #N8

#row10
Z[115, 40] = 33.1       #B10
Z[115, 120] = 30.4      #D10
Z[115, 200] = 33.9      #G10
Z[115, 280] = 33.9      #I10
Z[115, 360] = 30.4      #L10
Z[115, 440] = 33.1      #N10 

#row12
Z[25, 40] = 28.6        #B12
Z[25, 120] = 27.7       #D12
Z[25, 360] = 27.7       #L12
Z[25, 440] = 28.6       #N12

interp_spline = RectBivariateSpline(yi, xi, Z)

Z2 = interp_spline(y, x)


plt.scatter(xi,yi,c=Z2)
plt.axis([xmin,xmax,ymin,ymax])
plt.colorbar()
plt.show

非常感谢任何帮助!

此致 菲尔

0 个答案:

没有答案