Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 边界插值掩模_Python_Numpy_Matplotlib_Scipy_Plotly - Fatal编程技术网

Python 边界插值掩模

Python 边界插值掩模,python,numpy,matplotlib,scipy,plotly,Python,Numpy,Matplotlib,Scipy,Plotly,我想生成Z值之间的梯度热图,并使用Plotly显示 我遇到的问题是,如何有效地屏蔽在没有数据点的“凹面”区域中插值形成的不需要的数据。一种解决方案(可能不是最优雅的)是找到点的边界(凹面外壳),然后将此边界之外的任何内容设置为nan 查找您可以使用的边界,并确定栅格_z点是否在您可以使用的边界内(或上) 下面是一个在第一个plotly plots(曲线图)之前出现的示例: from shapely.geometry import Polygon, Point import alphashape

我想生成Z值之间的梯度热图,并使用Plotly显示

我遇到的问题是,如何有效地屏蔽在没有数据点的“凹面”区域中插值形成的不需要的数据。

一种解决方案(可能不是最优雅的)是找到点的边界(凹面外壳),然后将此边界之外的任何内容设置为
nan

查找您可以使用的边界,并确定
栅格_z
点是否在您可以使用的边界内(或上)

下面是一个在第一个plotly plots(曲线图)之前出现的示例:

from shapely.geometry import Polygon, Point
import alphashape

mpoints = [Point(X, Y) for X, Y in zip(x, y)]

alpha=.125
hull = alphashape.alphashape(mpoints, alpha)
poly = Polygon(hull)

grid_gz = grid_z
gx = np.arange(min(x), max(x),1)
gy = np.arange(min(y), max(y),1)
for i, gxi in enumerate(gx):
    for j, gyi in enumerate(gy):
        if not np.isnan(grid_gz[j,i]): #UPDATE: no need to test pts that are already NaN
            p1 = Point(gxi, gyi)
            test = poly.contains(p1) | poly.touches(p1)
            if test==False:
                grid_gz[j,i]=np.nan

fig = go.Figure()

fig.add_trace(
    go.Heatmap(z=grid_gz,x0=min(x),y0=min(y),showscale=True, zsmooth='best', 
               connectgaps=False, colorscale='Hot'
               ))

fig.add_trace(
    go.Scatter(
        x=x,
        y=y,mode="markers",marker_size=2,marker_color="black",
    ))

fig.update_layout(
    width = 1200,
    height = 1200,
    title = "Gradient Heatmap Plot",
    yaxis = dict(
      scaleanchor = "x",
      scaleratio = 1,
    ))

fig.show()
进一步评论:

  • 我最终手动选择了alpha值。您可以使用
    optimizealpha
    来查找alpha值,但该值最终有点太过自然,并且一条边在热图中有台阶。我也看到了
  • 有关更多信息,请访问
    alphashape
  • 更多信息可以在shapely的
    包含
    触摸

哇,太感谢你了,杰维西!这对我帮助很大!我真的很感激!如果有时间,我可能会发布更新,但我认为这可以通过只测试非nan
grid_z
结果来改进。