我从一个天气模型中获取了一些数据,并试图在Plotly内部将其绘制为等值面,但每次都会得到一张没有任何错误消息的空白图。我对plotly不熟悉,所以这似乎是一个简单的问题。文档和教程页面没有任何帮助
我已将输入数据缩减为3x3x3 3D阵列(在发送到go.Isosurface之前将其展平),3D格式的数据为:
z_subset_tiled_2 = np.array([[[151.11943054, 151.11943054, 151.11943054],
[151.11943054, 151.11943054, 151.11943054],
[151.11943054, 151.11943054, 151.11943054]],
[[255.65301514, 255.65301514, 255.65301514],
[255.65301514, 255.65301514, 255.65301514],
[255.65301514, 255.65301514, 255.65301514]],
[[363.32260132, 363.32260132, 363.32260132],
[363.32260132, 363.32260132, 363.32260132],
[363.32260132, 363.32260132, 363.32260132]]], dtype='float32')
lat_subset_tiled_2 = np.array([[[14.10366 , 14.103652 , 14.103641 ],
[14.112637 , 14.112626 , 14.1126175],
[14.121613 , 14.121605 , 14.121593 ]],
[[14.10366 , 14.103652 , 14.103641 ],
[14.112637 , 14.112626 , 14.1126175],
[14.121613 , 14.121605 , 14.121593 ]],
[[14.10366 , 14.103652 , 14.103641 ],
[14.112637 , 14.112626 , 14.1126175],
[14.121613 , 14.121605 , 14.121593 ]]], dtype='float32')
lon_subset_tiled_2 = np.array([[[120.31331 , 120.32256 , 120.33182 ],
[120.31332 , 120.32256 , 120.331825],
[120.31332 , 120.32258 , 120.33184 ]],
[[120.31331 , 120.32256 , 120.33182 ],
[120.31332 , 120.32256 , 120.331825],
[120.31332 , 120.32258 , 120.33184 ]],
[[120.31331 , 120.32256 , 120.33182 ],
[120.31332 , 120.32256 , 120.331825],
[120.31332 , 120.32258 , 120.33184 ]]], dtype='float32')
theta_2 = np.array([[[301.3794 , 301.44308, 301.4732 ],
[301.33685, 301.39835, 301.44403],
[301.3008 , 301.35147, 301.40442]],
[[301.39117, 301.46188, 301.48926],
[301.34885, 301.41992, 301.46976],
[301.31003, 301.37192, 301.43362]],
[[301.49753, 301.57315, 301.5888 ],
[301.4737 , 301.54742, 301.59207],
[301.45 , 301.51346, 301.57153]]], dtype='float32')
打印功能为:
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()
在坐标上,它甚至都不起作用,所以我希望这里有一些明显的错误。不过,用于处理真实数据的文档并不存在
我不是Plotly方面的专家,但您似乎无法使用顺序不正确的点(即,形成曲面的点集合,但也包括该曲面内部的更多点)创建等值面
例如,请注意,虽然以下代码正确呈现:
交换第一个和最后一个x、y、z坐标意味着这不再是正确排序的曲面,因此Plotly无法渲染图形
我认为您很可能需要对其中一个数组进行排序(比如x坐标),然后围绕该数组重新排列其他数组。当我有更多的空闲时间时,我很高兴再次讨论这个问题,但希望这能让你朝着正确的方向开始
还有:任何比我更有3D绘图经验的人,请加入
如果任何人由于依赖性问题(如我)而无法使用mayavi解决方案,那么使用
np.mgrid
和scipy.interpolate.griddata
将数据插入到常规网格对我的情况有效在下面的示例中,z、lon和lat分别是高度、x和y的3d阵列。数据数组是(z、lon、lat)处的值的三维数组
不管出于什么原因,即使我的数据已经被网格化了,当我将所有内容重新插值到一个统一的网格中时,plotly仍然有效。效率不是很高,但它很有效
相关问题 更多 >
编程相关推荐