如何解决如何用非分析数据绘制出等高面?
我正在从天气模型中获取一些数据,并试图将其绘制为Plotly内部的等值面,但是每次都得到一个空白图形,而没有任何错误消息。我是新手,所以这似乎是一个简单的问题。文档和教程页面没有帮助。
我将输入数据缩减为3x3x3 3D数组(在发送到go.Isosurface之前已变平),其3D形式的数据为:
import plotly.graph_objects as go
fig= go.Figure(data=go.Isosurface(
x=lon_subset_tiled_2.flatten(),y=lat_subset_tiled_2.flatten(),z=z_subset_tiled_2.flatten(),value=theta_2.flatten(),isomin = 301.4,isomax = 301.5,caps=dict(x_show=False,y_show=False)
))
fig.show()
,绘图功能为:
{{1}}
它甚至似乎都不符合坐标,所以我希望这里有些明显的错误。只是没有关于处理真实数据的文档。
解决方法
我不是Plotly的专家,但是您似乎无法创建一个等值面,该等值面的点排列不正确(即,形成表面的点的集合,但在该表面内部也包含更多的点)>
例如,请注意,以下代码可以正确呈现:
ffmpeg
交换第一个和最后一个x,y,z坐标意味着这不再是适当排序的表面,因此Plotly无法呈现图形。
fig= go.Figure(data=go.Isosurface(
x=np.array([0,1,1]),y=np.array([1,0]),z=np.array([1,value=theta_2[0].flatten(),isomin = 301.3,isomax = 301.6
))
fig.show()
我认为您很可能需要对一个数组进行排序(例如x坐标),然后围绕该数组重新排列其他数组。当我有更多的空闲时间时,我很乐意重新审视此问题,但希望这可以使您朝正确的方向入手!
也:在3D绘图方面比我经验更多的人,请发出声音!
,如果有人由于依赖性问题(像我一样)而无法使用 mayavi 解决方法,使用 np.mgrid
和 scipy.interpolate.griddata
将数据插入到常规网格适用于我的情况。
在下面的示例中,z、lon 和 lat 分别是高度、x 和 y 的 3d 数组。数据数组是 (z,lon,lat) 处的 3d 值数组
# Data coordinates
points = np.array( (z.flatten(),lon.flatten(),lat.flatten()) ).T
# Data values @ above coords
values = data.flatten()
# Grid to interp to
Z,X,Y = np.mgrid[z.min():z.max():20j,lon.min():lon.max():50j,lat.min():lat.max():50j]
# New data values on interp grid
newdata = griddata( points,values,(Z,Y) )
fig = go.Figure(data=[
go.Isosurface(x=X.flatten(),y=Y.flatten(),z=Z.flatten(),value=newdata.flatten(),opacity=0.3,isomin=15,isomax=30,surface_count=5,lighting=dict(ambient=0.7),colorscale='amp',showscale=False,caps=dict(x_show=False,y_show=False)
),])
无论出于何种原因,即使我的数据已经网格化,当我将所有内容重新插入到统一网格中时,情节仍然有效。效率不高,但很管用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。