小美满 發表於 2025-5-7 09:21:00

『Plotly实战指南』--在科学数据可视化中的应用(下)

<p>科学数据往往涉及多个维度,例如分子结构中的空间坐标、物理实验中的时间序列以及化学反应中的温度变化等。</p>
<p>传统的二维可视化方法已经难以满足这些复杂数据的展示需求。</p>
<p>而<code>Plotly</code>,作为一种强大的可视化库,凭借其支持 3D 可视化、动态交互以及跨学科兼容性的核心优势,成为了科学数据可视化的理想选择。</p>
<p>本文将探讨如何通过<code>Plotly</code>实现科学数据的立体呈现与动态分析,从而提升科研效率。</p>
<h1 id="1-科学数据3d可视化">1. 科学数据3D可视化</h1>
<h2 id="11-三维散点图">1.1. 三维散点图</h2>
<p><strong>三维散点图</strong>是展示多维数据的一种有效方式。</p>
<p>通过使用<code>plotly.graph_objects.Scatter3D</code>,可以轻松地在三维空间中展示数据点。</p>
<p>例如,在分子结构可视化中,每个原子可以作为一个数据点,其坐标由三维空间中的<code>x</code>、<code>y</code>和<code>z</code>值表示。</p>
<p>通过颜色和尺寸的映射,我们可以进一步增强数据的维度表达。</p>
<pre><code class="language-python">import plotly.graph_objects as go
import numpy as np

# 生成分子动力学模拟的原子坐标(示例)
np.random.seed(42)
coords = np.random.randn(100, 3) * 5# 三维坐标
elements = np.random.choice(['C', 'H', 'O'], 100)# 原子类型
colors = {'C': '#4B4B4B', 'H': '#FFD700', 'O': '#FF4500'}# 元素颜色映射

fig = go.Figure(data=[
    go.Scatter3d(
      x=coords[:,0], y=coords[:,1], z=coords[:,2],
      mode='markers',
      marker=dict(
            size=,# 原子尺寸映射
            color= for e in elements],
            opacity=0.8
      ),
      hovertext=elements# 悬停显示元素类型
    )
])
fig.update_layout(scene=dict(aspectmode='cube'),height=600, width=600)
fig.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202505/83005-20250507092116492-612733472.gif" alt="" loading="lazy"></p>
<p>此代码生成一个可旋转的三维分子模型,通过颜色与尺寸区分原子类型。</p>
<p>若叠加温度场数据,还可通过<code>coloraxis</code>实现第四维度的热力学状态映射。</p>
<h2 id="12-三维曲面图">1.2. 三维曲面图</h2>
<p>三维曲面图则适用于展示连续的三维数据。</p>
<p>通过使用<code>plotly.graph_objects.Surface</code>,我们可以可视化复杂的科学现象。</p>
<p>例如,在流体力学模拟中,三维曲面图可以展示速度场或压力场的分布。</p>
<p>在地形数据可视化中,三维曲面图可以清晰地展示山脉、山谷等地形特征。</p>
<p>下面的示例展示如何使用三维曲面来可视化量子化学势能面。</p>
<pre><code class="language-python"># 可视化量子化学势能面
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))# 示例势能函数

fig = go.Figure(data=)
fig.update_layout(
    scene=dict(
      xaxis_title="X 坐标",
      yaxis_title="Y 坐标",
      zaxis_title="势能",
    ),
    margin=dict(l=0, r=0, b=0, t=0),
    width=800,
    height=600,
)
fig.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202505/83005-20250507092116477-1153341245.gif" alt="" loading="lazy"></p>
<p>通过曲面起伏与色彩梯度,可直观分析势能面的鞍点与极小值位置。</p>
<p>结合<code>Contour</code>图层的叠加,还能实现能级等高线的同步显示。</p>
<h1 id="2-科学数据动态可视化">2. 科学数据动态可视化</h1>
<p><code>Plotly</code>的动画框架(<code>animation_frame</code>)为动态数据的可视化提供了强大的支持。</p>
<p>通过这一功能,科学家可以动态地展示数据随时间的演变。</p>
<p>例如,在化学反应中,分子的运动轨迹可以通过动画展示出来,用户可以看到分子如何在反应过程中相互碰撞、结合或分解;</p>
<p>在物理实验中,温度场随时间的扩散过程也可以通过动画清晰地呈现出来。</p>
<p>这种动态展示方式不仅直观,还能帮助科学家更好地理解实验过程。</p>
<p>下面的示例通过动画清晰展示热量从中心向外扩散的速率变化。</p>
<pre><code class="language-python"># 模拟热扩散过程
times = np.linspace(0, 10, 50)
z_data = ]

fig = go.Figure(
    frames=[
      go.Frame(data=, name=str(t))
      for z, t in zip(z_data, times)
    ]
)
fig.add_trace(go.Surface(z=z_data, colorscale="Plasma"))
fig.update_layout(
    scene=dict(zaxis=dict(range=)),
    updatemenus=[
      dict(
            type="buttons", buttons=)]
      )
    ],
    width=800,height=600,
)
fig.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202505/83005-20250507092116365-564379806.gif" alt="" loading="lazy"></p>
<h1 id="3-总结">3. 总结</h1>
<p><code>Plotly</code>在科学领域的独特价值在于其能够从静态 3D 模型到动态实验过程提供全面的可视化支持。</p>
<p>其交互性和动态功能不仅提高了科研效率,还为科研协作和成果展示提供了强大的工具。</p>
<p>展望未来,结合 <code>VR/AR</code> 技术,<code>Plotly</code>有望进一步扩展科学可视化的沉浸式体验。</p><br><br>
来源:https://www.cnblogs.com/wang_yb/p/18863636
頁: [1]
查看完整版本: 『Plotly实战指南』--在科学数据可视化中的应用(下)