我目前正在使用 Python 中的 Plotly 绘制 3D 曲面图。以下是我目前的代码:
import numpy as np
import plotly.graph_objects as go
# Definition of the domain
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
# Definition of the function, avoiding division by zero
Z = np.where(X**2 + Y**2 != 0, (X * Y) / (X**2 + Y**2), 0)
# Creation of the interactive graph
fig = go.Figure(data=[go.Surface(z=Z, x=X, y=Y, colorscale='Viridis')])
# Add title and axis configurations
fig.update_layout(
title='Interactive graph of f(x, y) = xy / (x^2 + y^2)',
scene=dict(
xaxis_title='X',
yaxis_title='Y',
zaxis_title='f(X, Y)'
),
)
# Show the graph
fig.show()
我想将平面 (y = x) 添加到此图中。但是,我不知道该怎么做。
有人能指导如何将此平面添加到我现有的表面图中吗?任何帮助都将不胜感激!
要在 Plotly 中将“𝑦=𝑥”添加到 3D 曲面图,您可以为该平面定义一个单独的曲面,并使用另一个“go.Surface”对象将其添加到图中。
在 Plotly 中,表面图需要 𝑍 的明确值才能显示平面。为了在给定的 𝑍 范围内实现 𝑦=𝑥 平面,我们需要设置 𝑋 和 𝑌 以表示 𝑍 平坦范围内的 𝑦=𝑥。
这是我修改后的新代码,
输出为
问题是,您无法绘制一个垂直平面,将 Z 定义为 X 和 Y 的函数,就像您对其他表面所做的那样。这就是 Busra 的代码什么都不显示的原因。
(以二维思维:你可以绘制一条曲线,即 x = 一个范围,y = f(x)。但如果你想在该曲线上添加一条垂直线,你不能对另一个
f
垂直曲线执行相同的操作)幸运的是,没有必要这样做。
Surface
实际上并不绘制Z=f(x,y)
表面,但一般来说,绘制以 3 个 2D 数组形式指定的一堆“矩形”(嗯,可能是三角形对),分别表示 x、y 和 z。因此,就像您将垂直线绘制为 x=g(y) 和 y=a 范围(其中 g 为常数)一样,您可以在此处执行相同操作。例如,让 x 和 z 形成网格,并定义 y=f(x,z)=x
请注意,我已回收您的
x_plane
,只是为了使其尽可能接近域的预期重用。但是,由于这是一个平面(完全一样,仍然继续我的 2D 类比,您需要 y 是 100 个点的 linspace 才能绘制一条垂直线。x=[0,0], y=[-ymin, ymax] 就可以了),您实际上不需要在 plotly 上费心处理 100×100 离散曲面。所以
会得到完全相同的结果,但对 plotly 来说麻烦更少。只需一组 2x2 点(x、y 和 z),定义一个矩形。