我从两个 linspaces 开始,然后将它们网格化。然后我在网格上计算一个函数的值。我的函数称为 cpt_hcpv()
.然后我想热图我的数据,网格上的每个点都有相应的函数值。
代码看起来像
poro = np.linspace(min(poro), max(poro))
sw = np.linspace(min(sw), max(sw))
g = np.meshgrid(poro, sw)
points = zip(*(x.flat for x in g))
hcpv = []
for p in points:
hcpv = hcpv + [cpt_hcpv(p[0], p[1], poro, sw)]
与
def cpt_hcpv(pCut, sCut, poro, sw):
#find points belonging to calculation
truncated = [(p, s) for p, s in zip(poro, sw) if p > pCut and s < sCut ]
hcv = 0
for k in truncated:
hcv += p*(1-s)*0.5
return hcv
为什么我不计算 cpt_hcpv()
直接在网格上:因为我必须在理解中处理条件 truncated = [(p, s) for p, s in zip(poro, sw) if p > pCut and s < sCut ]
所以我必须迭代网格中的点。 我不知道如何在网格上迭代。
所以,我想从 3d 坐标绘制热图:在 points
中我有 x 和 y 点和 hcpv
我有每个点的 z 参数,顺序相同。
从我发现的示例中,有 pylab 和 matplotlib 解决方案可以根据 meshgrid + 在网格上计算的值绘制热图,其中一种方法将 meshgrid 作为参数。
有没有办法从 3d 坐标绘制热图?
如果您需要遍历网格,试试这个:
g = np.meshgrid(poro, sw)
#Turn into 2x3x3 array
g_arr = np.array(g)
#Move first dimension to third: 3x3x2 array
g_arr = g_arr.swapaxes(0,1).swapaxes(1,2)
#Generate results by iterating over first and second dimension, and unpacking the third
hcpv = np.array([[cpt_hcpv(p, s, poro, sw) for p,s in r] for r in g_arr])
我不知道 matplotlib 是否可以轻松绘制来自通用 3-d 点的热图。它必须处理分散、无序和缺失点的一般情况。
我是一名优秀的程序员,十分优秀!