我希望有人可以指出我正确的方向......我对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
非常感谢任何帮助!
此致 菲尔